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: * @(#)ComponentValidator.java
025: * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
026: *
027: * END_HEADER - DO NOT EDIT
028: */
029: /**
030: * ArchiveValidator.java
031: *
032: * SUN PROPRIETARY/CONFIDENTIAL.
033: * This software is the proprietary information of Sun Microsystems, Inc.
034: * Use is subject to license terms.
035: *
036: * Created on January 2, 2006, 4:49 PM
037: */package com.sun.jbi.management.util;
038:
039: import com.sun.jbi.EnvironmentContext;
040: import com.sun.jbi.StringTranslator;
041:
042: import com.sun.jbi.management.descriptor.ComponentDescriptor;
043: import com.sun.jbi.management.message.MessageBuilder;
044: import com.sun.jbi.management.descriptor.Jbi;
045: import com.sun.jbi.management.LocalStringKeys;
046:
047: import java.util.logging.Logger;
048: import javax.jbi.JBIException;
049:
050: /**
051: * Validator for component archives.
052: *
053: * @author Sun Microsystems, Inc
054: */
055: public class ComponentValidator implements Validator {
056: private Logger mLog;
057: private StringTranslator mTranslator;
058: private ArchiveHelper mArchHelper;
059: private boolean mValidate;
060: private MessageBuilder mMsgBuilder;
061: private static final String EMPTY_STR = "";
062:
063: /**
064: * @param ctx - the environment context
065: * @param validate - flag to indicate whether jbi.xml should be validated based
066: * on the schema
067: */
068: public ComponentValidator(EnvironmentContext envCtx,
069: boolean validate) throws Exception {
070: mTranslator = envCtx
071: .getStringTranslator("com.sun.jbi.management");
072: mLog = Logger.getLogger("com.sun.jbi.management");
073: mArchHelper = new ArchiveHelper(envCtx);
074: mValidate = validate;
075: mMsgBuilder = new MessageBuilder(mTranslator);
076: }
077:
078: /**
079: * Perform archive validation based on the type of the archive.
080: *
081: * @param archivePath - absolute path to the archive.
082: * @throws Exception if the archive is not valid. The exception message
083: * has the details on what caused validation to fail.
084: *
085: */
086: public void validate(java.io.File archivePath) throws Exception {
087: validateDescriptor(archivePath);
088: }
089:
090: /*---------------------------------------------------------------------------------*\
091: * Private Helpers *
092: \*---------------------------------------------------------------------------------*/
093:
094: /**
095: * Validate the jbi.xml component installation descriptor in the archive
096: *
097: * @throws Exception if any inconsistencies are found.
098: */
099: private void validateDescriptor(java.io.File archivePath)
100: throws Exception {
101: Jbi jbiXml = mArchHelper.loadJbiXml(archivePath, mValidate);
102: ComponentDescriptor descr = null;
103: String[] params = new String[] { archivePath.getAbsolutePath() };
104:
105: try {
106: descr = new ComponentDescriptor(jbiXml);
107: } catch (IllegalArgumentException iex) {
108:
109: String errMsg = mTranslator
110: .getString(
111: LocalStringKeys.JBI_ADMIN_INVALID_COMPONENT_ARCHIVE_TYPE,
112: archivePath);
113: String jbiMsg = mMsgBuilder.buildFrameworkMessage(
114: "validateDescriptor",
115: MessageBuilder.TaskResult.FAILED,
116: MessageBuilder.MessageType.ERROR, mMsgBuilder
117: .getMessageString(errMsg), params,
118: mMsgBuilder.getMessageToken(errMsg));
119: throw new JBIException(jbiMsg);
120: }
121:
122: // -- Check LifeCycle Class Name
123: if (EMPTY_STR.equals(descr.getComponentClassName())) {
124: String errMsg = mTranslator
125: .getString(
126: LocalStringKeys.JBI_ADMIN_MISSING_COMPONENT_LIFECYCLE,
127: archivePath);
128:
129: String jbiMsg = mMsgBuilder.buildFrameworkMessage(
130: "validateDescriptor",
131: MessageBuilder.TaskResult.FAILED,
132: MessageBuilder.MessageType.ERROR, mMsgBuilder
133: .getMessageString(errMsg), params,
134: mMsgBuilder.getMessageToken(errMsg));
135: throw new JBIException(jbiMsg);
136: }
137:
138: // -- Check BootStrapClassName
139: if (EMPTY_STR.equals(descr.getBootstrapClassName())) {
140: String errMsg = mTranslator
141: .getString(
142: LocalStringKeys.JBI_ADMIN_MISSING_COMPONENT_BOOTSTRAP,
143: archivePath);
144:
145: String jbiMsg = mMsgBuilder.buildFrameworkMessage(
146: "validateDescriptor",
147: MessageBuilder.TaskResult.FAILED,
148: MessageBuilder.MessageType.ERROR, mMsgBuilder
149: .getMessageString(errMsg), params,
150: mMsgBuilder.getMessageToken(errMsg));
151: throw new JBIException(jbiMsg);
152: }
153:
154: // -- Check BootStrap Class path, at least one class should be there
155: if (descr.getBootstrapClassPathElements().isEmpty()) {
156: String errMsg = mTranslator
157: .getString(
158: LocalStringKeys.JBI_ADMIN_EMPTY_BOOTSTRAP_CLASSPATH,
159: archivePath);
160:
161: String jbiMsg = mMsgBuilder.buildFrameworkMessage(
162: "validateDescriptor",
163: MessageBuilder.TaskResult.FAILED,
164: MessageBuilder.MessageType.ERROR, mMsgBuilder
165: .getMessageString(errMsg), params,
166: mMsgBuilder.getMessageToken(errMsg));
167: throw new JBIException(jbiMsg);
168: }
169:
170: // -- Check LifeCycle Class path, at least one class should be there
171: if (descr.getComponentClassPathElements().isEmpty()) {
172: String errMsg = mTranslator
173: .getString(
174: LocalStringKeys.JBI_ADMIN_EMPTY_LIFECYCLE_CLASSPATH,
175: archivePath);
176:
177: String jbiMsg = mMsgBuilder.buildFrameworkMessage(
178: "validateDescriptor",
179: MessageBuilder.TaskResult.FAILED,
180: MessageBuilder.MessageType.ERROR, mMsgBuilder
181: .getMessageString(errMsg), params,
182: mMsgBuilder.getMessageToken(errMsg));
183: throw new JBIException(jbiMsg);
184: }
185: }
186:
187: }
|