001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026: package com.sun.satsa.acl;
027:
028: import com.sun.satsa.util.*;
029: import com.sun.satsa.util.pkcs15.*;
030: import java.util.Vector;
031: import java.io.IOException;
032:
033: /**
034: * This class represents the SATSA ACIF file abstraction
035: */
036: public class ACIF extends PKCS15File {
037:
038: /** This vector contains parsed objects from ACIF. */
039: private Vector ACIF;
040: /** This vector contains the entries from the ACIF file */
041: private Vector ACFs = new Vector();
042:
043: /**
044: * Creates AODF object for the pointed location and file system
045: * @param location Location required location
046: * @param files AclFileSystem requred file system
047: */
048: public ACIF(Location location, AclFileSystem files) {
049: super (location, files);
050: }
051:
052: /**
053: * Loads ACIF object from the file system
054: * @throws IOException if I/O error occurs
055: * @throws TLVException if TLV error occurs
056: */
057: public void load() throws IOException, TLVException {
058: ACIF = new Vector();
059: resetLoader(ACIF, null, null);
060: parseDF(location.path);
061: readACIF();
062: }
063:
064: /**
065: * Reads ACIF data from the ACIF vector.
066: * @throws IOException if I/O error occurs
067: * @throws TLVException if TLV error occurs
068: * <pre>
069: * It is assumed that the ACIF file contains information about ACF files
070: * in the following format:
071: * SEQUENCE {
072: * OCTET_STRING // aid (Optional)
073: * SEQUENCE {
074: * OCTET_STRING // path
075: * INTEGER // index
076: * CONTEXT_PRIMITIVE_0 { ???
077: * INTEGER // length
078: * }
079: * }
080: * }
081: * </pre>
082: */
083: private void readACIF() throws IOException, TLVException {
084: for (int i = 0; i < ACIF.size(); i++) {
085: ACF acf = new ACF();
086: TLV t = ((TLV) ACIF.elementAt(i)).child;
087: if (t.type == TLV.OCTETSTR_TYPE) { /* aid */
088: acf.setAID(t.getValue());
089: t = t.next;
090: }
091: if (t.type == TLV.SEQUENCE_TYPE) { /* location */
092: acf.setPath(files.pathToLocation(t));
093: }
094: ACFs.addElement(acf);
095: }
096: }
097:
098: /**
099: * Returns number of entries in the ACIF file
100: * @return int
101: */
102: public int getACFCount() {
103: return ACFs.size();
104: }
105:
106: /**
107: * Returns AID of the pointed entry (ACF)
108: * @param index int index of required entry
109: * @return byte[] AID of the required entry
110: */
111: public byte[] getAID(int index) {
112: return ((ACF) ACFs.elementAt(index)).getAID();
113: }
114:
115: /**
116: * Returns location of the pointed ACF
117: * @param index int index of the required ACF
118: * @return Location of the required ACF
119: */
120: public Location getACFPath(int index) {
121: return ((ACF) ACFs.elementAt(index)).getPath();
122: }
123:
124: /**
125: * This class represents the entry of the ACIF file
126: *
127: */
128: private class ACF {
129: /** AID of the entry */
130: private byte[] AID;
131: /** location of the ACF */
132: private Location location;
133:
134: /**
135: * Sets AID for the entry
136: * @param aid byte[] required AID
137: */
138: public void setAID(byte[] aid) {
139: AID = aid;
140: }
141:
142: /**
143: * Returns AID of the entry
144: * @return byte[] required AID
145: */
146: public byte[] getAID() {
147: return AID;
148: }
149:
150: /**
151: * Sets location for the entry
152: * @param location Location required location
153: */
154: public void setPath(Location location) {
155: this .location = location;
156: }
157:
158: /**
159: * Returns location of the entry
160: * @return Location
161: */
162: public Location getPath() {
163: return location;
164: }
165: }
166: }
|