001: /*
002: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
004: *
005: * This program is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU General Public License version
007: * 2 only, as published by the Free Software Foundation.
008: *
009: * This program is distributed in the hope that it will be useful, but
010: * WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * General Public License version 2 for more details (a copy is
013: * included at /legal/license.txt).
014: *
015: * You should have received a copy of the GNU General Public License
016: * version 2 along with this work; if not, write to the Free Software
017: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
018: * 02110-1301 USA
019: *
020: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
021: * Clara, CA 95054 or visit www.sun.com if you need additional
022: * information or have any questions.
023: */
024:
025: package com.sun.jumpimpl.module.download;
026:
027: import com.sun.jump.module.download.JUMPDownloadDescriptor;
028:
029: import java.net.MalformedURLException;
030: import java.net.URL;
031: import java.util.Properties;
032: import java.util.Vector;
033:
034: /**
035: * <code>JUMPDownloadDescriptor</code> contains the metadata associated with
036: * any content that can be downloaded.
037: */
038:
039: public class BaseDownloadDescriptor extends JUMPDownloadDescriptor {
040:
041: /** Creates a new instance of BaseDownloadDescriptor */
042: public BaseDownloadDescriptor(String schema, String source) {
043: super (schema, source);
044: }
045:
046: public void setName(String name) {
047: this .name = name;
048: }
049:
050: public void setDisplayName(String displayName) {
051: this .displayName = displayName;
052: }
053:
054: public void setVersion(String version) {
055: this .version = version;
056: }
057:
058: public void setSize(int size) {
059: this .size = size;
060: }
061:
062: public void setMimeType(String mimeType) {
063: this .mimeType = mimeType;
064: }
065:
066: public void setType(String type) {
067: this .type = type;
068: }
069:
070: public void setObjectURI(String objectURI) {
071: this .objectURI = getFullURI(objectURI);
072: }
073:
074: public void setInstallNotifyURI(String installNotifyURI) {
075: this .installNotifyURI = installNotifyURI;
076: }
077:
078: public void setDescription(String description) {
079: this .description = description;
080: }
081:
082: public void setVendor(String vendor) {
083: this .vendor = vendor;
084: }
085:
086: public void setIconURI(String iconURI) {
087: this .iconURI = getFullURI(iconURI);
088: }
089:
090: public void setSecurityLevel(String securityLevel) {
091: this .securityLevel = securityLevel;
092: }
093:
094: public void setClasspath(String classpath) {
095: this .classpath = classpath;
096: }
097:
098: public void setApplications(Properties applications[]) {
099: this .applications = applications;
100: }
101:
102: public void setData(String data) {
103: this .data = data;
104: }
105:
106: public void setSchema(String schema) {
107: this .schema = schema;
108: }
109:
110: public void setSource(String source) {
111: this .source = source;
112: }
113:
114: /**
115: * Check a provided URL or URI for valid syntax.
116: * @param uri The URI or URI to check.
117: * @throws SyntaxException If there is a problem with the URI.
118: */
119: protected static void checkURL(String uri) throws SyntaxException {
120: try {
121: URL u = new URL(uri);
122: } catch (MalformedURLException mfue) {
123: throw new SyntaxException("InvalidURI");
124: }
125: }
126:
127: private void checkType(String downloadType) throws SyntaxException {
128: if (downloadType != TYPE_APPLICATION
129: && downloadType != TYPE_DATA
130: && downloadType != TYPE_LIBRARY) {
131: throw new SyntaxException("InvalidDownloadType");
132: }
133: return;
134: }
135:
136: public void checkOut() throws SyntaxException {
137: // check vital tags are present
138: checkNN(name);
139: checkFalse(size < 0);
140: checkNN(vendor);
141: checkNN(version);
142:
143: // check any application/daemon/library/data tags are present.
144: checkFalse((applications == null) && (data == null)
145: && !isLibrary());
146:
147: // check there is an object uri, and positive size if
148: // it's either daemon or application.
149: if (applications != null) {
150: checkFalse((objectURI == null) || (size <= 0));
151: }
152:
153: // Check each application for internal consistency.
154: //if (applications != null) {
155: // Iterator i = applications.iterator();
156: // while ( i.hasNext() ) {
157: // ( (JUMPApplication)i.next() ).check();
158: //}
159: //}
160: }
161:
162: private static void checkNull(Object o) throws SyntaxException {
163: if (o != null) {
164: throw new SyntaxException();
165: }
166: }
167:
168: private static void checkNN(Object o) throws SyntaxException {
169: if (o == null) {
170: throw new SyntaxException();
171: }
172: }
173:
174: private static void checkFalse(boolean val) throws SyntaxException {
175: if (val) {
176: throw new SyntaxException();
177: }
178: }
179:
180: private String getFullURI(String targetURI) {
181: String result = targetURI;
182: // check if the targetURI is relative or absolute.
183: // According to RFC 2396 we may just check if it starts with protocol
184: int protocolLength = getSource().indexOf(':');
185: if (protocolLength >= 0) {
186: String protocol = getSource().substring(0,
187: protocolLength + 1);
188: if (!targetURI.startsWith(protocol)) {
189: int lastSlash = getSource().lastIndexOf('/');
190: if (lastSlash == -1)
191: result = getSource() + "/" + targetURI;
192: else
193: result = getSource().substring(0, lastSlash + 1)
194: + targetURI;
195: }
196: }
197: return result;
198: }
199:
200: }
|