/*
* Copyright 2010 Red Hat, Inc. and/or its affiliates.
*
* 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.eclipse.flow.common.datatype.impl;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.drools.eclipse.flow.common.datatype.DataTypeRegistry;
import org.drools.core.process.core.datatype.DataTypeFactory;
/**
* Default implementation of a datatype registry.
*/
public class DataTypeRegistryImpl implements DataTypeRegistry {
private Map<Class<?>, DataTypeInfo> dataTypes = new HashMap<Class<?>, DataTypeRegistryImpl.DataTypeInfo>();
public Set<IDataTypeInfo> getDataTypes() {
return new HashSet<IDataTypeInfo>(dataTypes.values());
}
public void registerDataType(Class<?> type, DataTypeFactory dataTypeFactory, String name, Class<?> valueEditorClass,
Class<?> dataTypeEditorClass) {
if (dataTypeFactory == null) {
throw new NullPointerException("Data type factory may not be null");
}
if (name == null) {
throw new NullPointerException("Name may not be null");
}
if (valueEditorClass == null) {
throw new NullPointerException("valueEditorClass may not be null");
}
if (dataTypeEditorClass == null) {
throw new NullPointerException("dataTypeEditorClass may not be null");
}
dataTypes.put(type, new DataTypeInfo(
type, dataTypeFactory, name, valueEditorClass, dataTypeEditorClass));
}
public IDataTypeInfo getDataTypeInfo(Class<?> type) {
IDataTypeInfo dataTypeInfo = dataTypes.get(type);
if (dataTypeInfo == null) {
throw new IllegalArgumentException("Cannot find data type info with type " + type);
}
return dataTypeInfo;
}
public class DataTypeInfo implements IDataTypeInfo {
private Class<?> type;
private DataTypeFactory dataTypeFactory;
private String name;
private Class<?> valueEditorClass;
private Class<?> dataTypeEditorClass;
private DataTypeInfo(Class<?> type, DataTypeFactory dataTypeFactory, String name,
Class<?> valueEditorClass, Class<?> dataTypeEditorClass) {
this.type = type;
this.dataTypeFactory = dataTypeFactory;
this.name = name;
this.valueEditorClass = valueEditorClass;
this.dataTypeEditorClass = dataTypeEditorClass;
}
public Class<?> getType() {
return type;
}
public DataTypeFactory getDataTypeFactory() {
return dataTypeFactory;
}
public String getName() {
return name;
}
public Class<?> getValueEditorClass() {
return valueEditorClass;
}
public Class<?> getDataTypeEditorClass() {
return dataTypeEditorClass;
}
}
}