/**
* Copyright 2010 JBoss Inc
*
* Licensed 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.drools.builder;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class ResourceType implements Serializable {
private String name;
private String description;
private String defaultExtension;
private static final Map<String, ResourceType> CACHE = Collections.synchronizedMap( new HashMap<String, ResourceType>() );
public ResourceType(String name,
String description,
String defaultExtension ) {
this.name = name;
this.description = description;
this.defaultExtension = defaultExtension;
}
public static ResourceType addResourceTypeToRegistry(final String resourceType,
final String description,
final String defaultExtension ) {
ResourceType resource = new ResourceType( resourceType,
description,
defaultExtension );
CACHE.put( resourceType,
resource );
return resource;
}
/** Drools Rule Language */
public static final ResourceType DRL = addResourceTypeToRegistry( "DRL",
"Drools Rule Language",
"drl");
/** Drools XML Rule Language */
public static final ResourceType XDRL = addResourceTypeToRegistry( "XDRL",
"Drools XML Rule Language",
"xdrl" );
/** Drools DSL */
public static final ResourceType DSL = addResourceTypeToRegistry( "DSL",
"Drools DSL",
"dsl");
/** Drools DSL Rule */
public static final ResourceType DSLR = addResourceTypeToRegistry( "DSLR",
"Drools DSL Rule",
"dslr");
/** Drools Rule Flow Language */
public static final ResourceType DRF = addResourceTypeToRegistry( "DRF",
"Drools Rule Flow Language",
"rf" );
/** Drools BPMN2 Language */
public static final ResourceType BPMN2 = addResourceTypeToRegistry( "BPMN2",
"Drools BPMN2 Language",
"bpmn" );
/** Decision Table */
public static final ResourceType DTABLE = addResourceTypeToRegistry( "DTABLE",
"Decision Table",
"xls" );
/** Binary Package */
public static final ResourceType PKG = addResourceTypeToRegistry( "PKG",
"Binary Package",
"pkg" );
/** Drools Business Rule Language */
public static final ResourceType BRL = addResourceTypeToRegistry( "BRL",
"Drools Business Rule Language",
"brl" );
/** Change Set */
public static final ResourceType CHANGE_SET = addResourceTypeToRegistry( "CHANGE_SET",
"Change Set",
"xcs" );
/** XSD */
public static final ResourceType XSD = addResourceTypeToRegistry( "XSD",
"XSD",
"xsd" );
public static ResourceType getResourceType(final String resourceType) {
ResourceType resource = CACHE.get( resourceType );
if ( resource == null ) {
throw new RuntimeException( "Unable to determine resource type " + resourceType );
}
return resource;
}
public static ResourceType determineResourceType( final String resourceName ) {
for( ResourceType type : CACHE.values() ) {
if( type.matchesExtension( resourceName ) ) {
return type;
}
}
return null;
}
public boolean matchesExtension( String resourceName ) {
return resourceName != null && resourceName.endsWith( "."+defaultExtension );
}
public String getDefaultExtension() {
return defaultExtension;
}
public String getDescription() {
return description;
}
public String getName() {
return name;
}
public String toString() {
return "ResourceType = '" + this.description + "'";
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public boolean equals(Object obj) {
if ( this == obj ) return true;
if ( obj == null ) return false;
if ( getClass() != obj.getClass() ) return false;
final ResourceType other = (ResourceType) obj;
if ( !name.equals( other.name ) ) return false;
return true;
}
}