/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.openejb.config; import org.apache.openejb.jee.NamedModule; import org.apache.openejb.loader.SystemInstance; import org.apache.openejb.util.URLs; import java.io.File; import java.net.URI; import java.util.LinkedHashSet; import java.util.Map; import java.util.Properties; import java.util.Set; /** * @version $Rev$ $Date$ */ public interface DeploymentModule { String OPENEJB_MODULENAME_USE_HASH = "openejb.modulename.useHash"; String getModuleId(); URI getModuleUri(); ClassLoader getClassLoader(); String getJarLocation(); File getFile(); Map<String, Object> getAltDDs(); ValidationContext getValidation(); Set<String> getWatchedResources(); boolean isStandaloneModule(); void setStandaloneModule(boolean isStandalone); Properties getProperties(); AppModule appModule(); class ID { private final String name; private final File location; private final URI uri; private boolean overriden; /** * The intention of this is to hold the extracted and archived versions */ private final Set<String> locations = new LinkedHashSet<String>(); public ID(final NamedModule vendorDd, final NamedModule specDd, final String name, final File location, final URI uri, final DeploymentModule module) { this.name = name(vendorDd, specDd, uri, location, name, module); this.location = location(location, uri); this.uri = uri(uri, location, this.name); if (location != null) { this.locations.add(location.getAbsolutePath()); } } public Set<String> getLocations() { return locations; } private URI uri(final URI uri, final File location, final String name) { if (uri != null) { return uri; } if (location != null) { return location.toURI(); } return URLs.uri(name); } private File location(final File location, final URI uri) { if (location != null) { return location; } if (uri != null && uri.isAbsolute()) { return new File(uri); } return null; } private String name(final NamedModule vendor, final NamedModule spec, final URI uri, final File location, final String name, final DeploymentModule module) { if (location != null) { final String systPropName = SystemInstance.get().getOptions().get(location.getName() + ".moduleId", (String) null); if (systPropName != null) { overriden = true; return systPropName; } } if (spec != null && spec.getModuleName() != null) { return spec.getModuleName().trim(); // used to override defaults so do it first } if (name != null && !name.startsWith("@")) { return name; } if (vendor != null && vendor.getModuleName() != null) { return vendor.getModuleName().trim(); } if (vendor != null && vendor.getId() != null) { return vendor.getId().trim(); } if (spec != null && spec.getId() != null) { return spec.getId().trim(); } if (uri != null) { return stripExtension(uri.getPath()); } if (location != null && SystemInstance.get().getOptions().get(OPENEJB_MODULENAME_USE_HASH, false)) { return moduleName(location) + module.hashCode(); } if (location != null) { return moduleName(location); } if (name != null) { return name; } return "@" + module.getClass().getSimpleName() + module.hashCode(); } public boolean isOverriden() { return overriden; } private String moduleName(final File location) { return stripExtension(NameFiltering.filter(location).getName()); } private String stripExtension(final String name) { final String[] exts = {".jar", ".zip", ".ear", ".war", ".rar", ".unpacked"}; for (final String ext : exts) { if (name.endsWith(ext)) { return name.substring(0, name.length() - ext.length()); } } return name; } public String getName() { if (name.startsWith("@")) { return name.substring(1); } return name; } public File getLocation() { return location; } public URI getUri() { return uri; } } }