001: /*
002: * BEGIN_HEADER - DO NOT EDIT
003: *
004: * The contents of this file are subject to the terms
005: * of the Common Development and Distribution License
006: * (the "License"). You may not use this file except
007: * in compliance with the License.
008: *
009: * You can obtain a copy of the license at
010: * https://open-esb.dev.java.net/public/CDDLv1.0.html.
011: * See the License for the specific language governing
012: * permissions and limitations under the License.
013: *
014: * When distributing Covered Code, include this CDDL
015: * HEADER in each file and include the License file at
016: * https://open-esb.dev.java.net/public/CDDLv1.0.html.
017: * If applicable add the following below this CDDL HEADER,
018: * with the fields enclosed by brackets "[]" replaced with
019: * your own identifying information: Portions Copyright
020: * [year] [name of copyright owner]
021: */
022:
023: /*
024: * @(#)JBIArchive.java
025: * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
026: *
027: * END_HEADER - DO NOT EDIT
028: */
029: package com.sun.jbi.ui.common;
030:
031: import java.io.File;
032: import java.io.IOException;
033: import java.io.InputStreamReader;
034: import java.util.jar.JarEntry;
035: import java.util.jar.JarFile;
036:
037: /**
038: * This class reads the jar file and identifies the jbi artifacts
039: * like jbi descriptors.
040: *
041: * @author Sun Microsystems, Inc.
042: */
043: public class JBIArchive {
044:
045: /**
046: * jar file
047: */
048: private JarFile mJarFile;
049: /**
050: * jbi descriptor
051: */
052: private JBIDescriptor mJbiDescriptor;
053:
054: /**
055: * Creates a new instance of JBIArchive
056: * @param pathName path name
057: * @throws IOException on error
058: */
059: public JBIArchive(String pathName) throws IOException {
060: this (new File(pathName));
061: }
062:
063: /**
064: * Creates a new instance of JBIArchive
065: * @param file file
066: * @throws IOException on error
067: */
068: public JBIArchive(File file) throws IOException {
069: this (new JarFile(file));
070: }
071:
072: /**
073: * Creates a new instance of JBIArchive
074: * @param jarFile jar file
075: * @throws IOException on error
076: */
077: public JBIArchive(JarFile jarFile) throws IOException {
078: this .mJarFile = jarFile;
079: validate();
080: }
081:
082: /**
083: * validates the archive
084: * @throws IOException on error
085: */
086: private void validate() throws IOException {
087: // TODO schema validate the jbi.xml on tools side in JbiDescriptor
088: // throws exception if it does not find the jbi.xml in /META-INF or not
089: // valid according to JBIDescriptor.
090: try {
091: JBIDescriptor jbiDD = getJbiDescriptor();
092: } catch (IOException ioEx) {
093: // rethrow
094: throw ioEx;
095: } catch (Exception ex) {
096: throw new IOException(ex.getMessage());
097: }
098: }
099:
100: /**
101: * returns JarFile Object for this archive
102: * @throws IOException on error
103: * @return jar file
104: */
105: public JarFile getJarFile() throws IOException {
106: return this .mJarFile;
107: }
108:
109: /**
110: * returns the jbi descriptor object
111: * @return jbi descriptor
112: * @throws Exception on error
113: */
114: public JBIDescriptor getJbiDescriptor() throws Exception {
115: if (this .mJbiDescriptor == null) {
116: JarEntry jbiXmlEntry = this .mJarFile
117: .getJarEntry("META-INF/jbi.xml");
118: if (jbiXmlEntry != null) {
119: InputStreamReader reader = null;
120: try {
121: reader = new InputStreamReader(this .mJarFile
122: .getInputStream(jbiXmlEntry));
123: this .mJbiDescriptor = JBIDescriptor
124: .createJBIDescriptor(reader);
125: } finally {
126: if (reader != null) {
127: try {
128: reader.close();
129: } catch (Exception ex) {
130: // ignore
131: }
132: }
133: try {
134: this .mJarFile.close();
135: } catch (Exception ex) {
136: // ignore
137: }
138: }
139: } else {
140: throw new IOException(JBIResultXmlBuilder
141: .createFailedJbiResultXml(Util
142: .getCommonI18NBundle(),
143: "jbi.xml.not.found.in.jbi.archive",
144: null));
145: }
146: }
147: return this .mJbiDescriptor;
148: }
149:
150: /**
151: * checks if it is a shared library archive
152: * @return true if it is shared library else false
153: */
154: public boolean isSharedLibraryArchive() {
155: try {
156: JBIDescriptor jbiDesc = getJbiDescriptor();
157: return (jbiDesc != null && jbiDesc
158: .isSharedLibraryDescriptor());
159: } catch (Exception ex) {
160: return false;
161: }
162: }
163:
164: /**
165: * checks if it is a service assembly archive
166: * @return true if it is service assembly else false
167: */
168: public boolean isServiceAssemblyArchive() {
169: try {
170: JBIDescriptor jbiDesc = getJbiDescriptor();
171: return (jbiDesc != null && jbiDesc
172: .isServiceAssemblyDescriptor());
173: } catch (Exception ex) {
174: return false;
175: }
176: }
177:
178: /**
179: * checks if it is a service engine archive
180: * @return true if it is service engine archive else fasle.
181: */
182: public boolean isServiceEngineArchive() {
183: try {
184: JBIDescriptor jbiDesc = getJbiDescriptor();
185: return (jbiDesc != null && jbiDesc
186: .isServiceEngineDescriptor());
187: } catch (Exception ex) {
188: return false;
189: }
190: }
191:
192: /**
193: * checks it is a binding component archive
194: * @return true if it is bc archive else false
195: */
196: public boolean isBindingComponentArchive() {
197: try {
198: JBIDescriptor jbiDesc = getJbiDescriptor();
199: return (jbiDesc != null && jbiDesc
200: .isBindingComponentDescriptor());
201: } catch (Exception ex) {
202: return false;
203: }
204: }
205:
206: }
|