blob: ace5f05203e933a5d9616b576fa26a4a576c8194 [file] [log] [blame]
/*
* 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.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @version $Rev: 1431091 $ $Date: 2013-01-09 21:24:31 +0000 (Wed, 09 Jan 2013) $
*/
public interface DeploymentModule {
static 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);
java.util.Properties getProperties();
AppModule appModule();
class ID {
private final String name;
private final File location;
private final URI uri;
private boolean overriden = false;
/**
* 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(File location) {
final List<String> invalid = new ArrayList<String>();
invalid.add("classes");
invalid.add("test-classes");
invalid.add("target");
invalid.add("build");
invalid.add("dist");
invalid.add("bin");
while (invalid.contains(location.getName())) {
location = location.getParentFile();
}
return stripExtension(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;
}
}
}