001: /*--
002:
003: Copyright (C) 2002-2005 Adrian Price.
004: All rights reserved.
005:
006: Redistribution and use in source and binary forms, with or without
007: modification, are permitted provided that the following conditions
008: are met:
009:
010: 1. Redistributions of source code must retain the above copyright
011: notice, this list of conditions, and the following disclaimer.
012:
013: 2. Redistributions in binary form must reproduce the above copyright
014: notice, this list of conditions, and the disclaimer that follows
015: these conditions in the documentation and/or other materials
016: provided with the distribution.
017:
018: 3. The names "OBE" and "Open Business Engine" must not be used to
019: endorse or promote products derived from this software without prior
020: written permission. For written permission, please contact
021: adrianprice@sourceforge.net.
022:
023: 4. Products derived from this software may not be called "OBE" or
024: "Open Business Engine", nor may "OBE" or "Open Business Engine"
025: appear in their name, without prior written permission from
026: Adrian Price (adrianprice@users.sourceforge.net).
027:
028: THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
029: WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
030: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
031: DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT,
032: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
033: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
034: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
035: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
036: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
037: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
038: POSSIBILITY OF SUCH DAMAGE.
039:
040: For more information on OBE, please see
041: <http://obe.sourceforge.net/>.
042:
043: */
044:
045: package org.obe.client.api.repository;
046:
047: import org.obe.xpdl.model.data.ExternalReference;
048: import org.xml.sax.EntityResolver;
049:
050: import java.util.Arrays;
051: import java.util.Comparator;
052:
053: /**
054: * @author Adrian Price
055: */
056: public final class BSFScriptMetaData extends ScriptMetaData {
057: private static final long serialVersionUID = -1968395429581029273L;
058: private static final String IMPL_CLASS = "org.obe.runtime.tool.BSFScript";
059: private static final String[] IMPL_CTOR_SIG = { BSFScriptMetaData.class
060: .getName() };
061: // TODO: Generate MIME-type mappings dynamically (somehow?).
062: private static final String[][] _fileExtToMimeType = {
063: // fileExt, contentType, language
064: { "bbas", "text/x-beanbasic", "beanbasic" },
065: { "bml", "text/x-bml", "bml" },
066: { "java", "text/x-java", "java" },
067: { "jc", "text/x-javaclass", "javaclass" },
068: { "jcl", "text/x-jacl", "jacl" },
069: { "js", "application/javascript", "javascript" },
070: { "jscr", "text/x-jscript", "jscript" },
071: { "ls", "text/x-lotusscript", "lotusscript" },
072: { "pl", "text/x-perl", "perl" },
073: { "pls", "text/x-perlscript", "perlscript" },
074: { "pn", "text/x-pnuts", "pnuts" },
075: { "py", "text/x-python", "jpython" },
076: { "rex", "text/x-netrexx", "netrexx" },
077: { "vbs", "text/x-vbscript", "vbscript" },
078: { "xpath", "text/x-xpath", "xpath" },
079: { "xsl", "text/xml/x-xslt", "xslt" },
080: { "xslt", "text/xml/x-xslt", "xslt" }, };
081: private static final Comparator _fileExtComparator = new Comparator() {
082: public int compare(Object o1, Object o2) {
083: return o1 instanceof String && o2 instanceof String ? ((String[]) o1)[0]
084: .compareTo(((String[]) o2)[0])
085: : -1;
086: }
087: };
088: private String _language;
089:
090: public BSFScriptMetaData() {
091: }
092:
093: public BSFScriptMetaData(String id, String displayName,
094: String description, String docUrl, String author,
095: String language, String script, boolean file) {
096:
097: super (id, displayName, description, docUrl, author, true,
098: script, file);
099: _language = language;
100: }
101:
102: public ToolAgentMetaData introspect(ExternalReference extRef,
103: EntityResolver entityResolver) {
104:
105: BSFScriptMetaData metaData = null;
106: String location = extRef.getLocation();
107: int index = location.lastIndexOf('.');
108: if (index != -1) {
109: String ext = location.substring(index + 1);
110: index = Arrays.binarySearch(_fileExtToMimeType, ext,
111: _fileExtComparator);
112: if (index > -1) {
113: String[] data = _fileExtToMimeType[index];
114: metaData = new BSFScriptMetaData(data[1], null, null,
115: null, null, data[2], location, true);
116: }
117: }
118: return metaData;
119: }
120:
121: protected String getImplClass() {
122: return IMPL_CLASS;
123: }
124:
125: protected String[] getImplCtorSig() {
126: return IMPL_CTOR_SIG;
127: }
128:
129: public String getLanguage() {
130: return _language != null ? _language : _type == null
131: || !allowInheritance ? null
132: : ((BSFScriptMetaData) _type).getLanguage();
133: }
134:
135: public void setLanguage(String language) {
136: _language = language;
137: }
138: }
|