/* * Copyright 2012 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.kie.workbench.common.services.datamodeller.core.impl; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.kie.workbench.common.services.datamodeller.core.DataModel; import org.kie.workbench.common.services.datamodeller.core.DataObject; import org.kie.workbench.common.services.datamodeller.core.JavaEnum; import org.kie.workbench.common.services.datamodeller.core.ObjectSource; import org.kie.workbench.common.services.datamodeller.core.Visibility; import org.kie.workbench.common.services.datamodeller.util.NamingUtils; public class DataModelImpl implements DataModel { Map<String, DataObject> dataObjects = new HashMap<String, DataObject>(); Map<String, DataObject> dependencyDataObjects = new HashMap<String, DataObject>(); Map<String, JavaEnum> javaEnums = new HashMap<String, JavaEnum>(); Map<String, JavaEnum> dependencyJavaEnums = new HashMap<String, JavaEnum>(); public DataModelImpl() { //errai marshalling } @Override public Set<DataObject> getDataObjects() { return getDataObjects( ObjectSource.INTERNAL ); } @Override public Set<DataObject> getDataObjects( ObjectSource source ) { switch ( source ) { case INTERNAL: return getDataObjects( dataObjects ); case DEPENDENCY: return getDataObjects( dependencyDataObjects ); } return null; } @Override public DataObject getDataObject( String className ) { return getDataObject( className, ObjectSource.INTERNAL ); } @Override public DataObject getDataObject( String className, ObjectSource source ) { switch ( source ) { case INTERNAL: return dataObjects.get( className ); case DEPENDENCY: return dependencyDataObjects.get( className ); } return null; } @Override public DataObject removeDataObject( String className ) { return removeDataObject( className, ObjectSource.INTERNAL ); } @Override public DataObject removeDataObject( String className, ObjectSource source ) { switch ( source ) { case INTERNAL: return dataObjects.remove( className ); case DEPENDENCY: return dependencyDataObjects.remove( className ); } return null; } @Override public DataObject addDataObject( String packageName, String name ) { return addDataObject( packageName, name, ObjectSource.INTERNAL ); } @Override public DataObject addDataObject( String className ) { return addDataObject( className, ObjectSource.INTERNAL ); } @Override public DataObject addDataObject( String className, ObjectSource source ) { return addDataObject( className, Visibility.PUBLIC, false, false, source ); } @Override public DataObject addDataObject( String packageName, String name, ObjectSource source ) { return addDataObject( packageName, name, Visibility.PUBLIC, false, false, source ); } @Override public DataObject addDataObject( String packageName, String name, Visibility visibility ) { return addDataObject( packageName, name, visibility, false, false, ObjectSource.INTERNAL ); } @Override public DataObject addDataObject( String packageName, String name, Visibility visibility, boolean isAbstract, boolean isFinal ) { return addDataObject( packageName, name, visibility, isAbstract, isFinal, ObjectSource.INTERNAL ); } @Override public DataObject addDataObject( String className, Visibility visibility, boolean isAbstract, boolean isFinal ) { return addDataObject( className, visibility, isAbstract, isFinal, ObjectSource.INTERNAL ); } @Override public DataObject addDataObject( String className, Visibility visibility, boolean isAbstract, boolean isFinal, ObjectSource source ) { String name = NamingUtils.extractClassName( className ); String packageName = NamingUtils.extractPackageName( className ); return addDataObject( packageName, name, visibility, isAbstract, isFinal, source ); } @Override public DataObject addDataObject( String packageName, String name, Visibility visibility, boolean isAbstract, boolean isFinal, ObjectSource source ) { switch ( source ) { case INTERNAL: return addDataObject( packageName, name, visibility, isAbstract, isFinal, dataObjects ); case DEPENDENCY: return addDataObject( packageName, name, visibility, isAbstract, isFinal, dependencyDataObjects ); } return null; } private Set<DataObject> getDataObjects( Map<String, DataObject> objectsMap ) { HashSet<DataObject> set = new HashSet<DataObject>(); set.addAll( objectsMap.values() ); return set; } private DataObject addDataObject( String packageName, String name, Visibility visibility, boolean isAbstract, boolean isFinal, Map<String, DataObject> objectsMap ) { DataObject dataObject = new DataObjectImpl( packageName, name, visibility, isAbstract, isFinal ); objectsMap.put( dataObject.getClassName(), dataObject ); return dataObject; } @Override public DataObject addDataObject( DataObject dataObject ) { dataObjects.put( dataObject.getClassName(), dataObject ); return dataObject; } @Override public List<DataObject> getExternalClasses() { List<DataObject> result = new ArrayList<DataObject>(); result.addAll( dependencyDataObjects.values() ); return result; } @Override public JavaEnum addJavaEnum( JavaEnum javaEnum ) { return addJavaEnum( javaEnum, ObjectSource.INTERNAL ); } @Override public JavaEnum addJavaEnum( JavaEnum javaEnum, ObjectSource source ) { switch ( source ) { case INTERNAL: javaEnums.put( javaEnum.getClassName(), javaEnum ); break; case DEPENDENCY: dependencyJavaEnums.put( javaEnum.getClassName(), javaEnum ); } return javaEnum; } @Override public JavaEnum removeJavaEnum( String className ) { return javaEnums.remove( className ); } @Override public JavaEnum getJavaEnum( String className ) { return javaEnums.get( className ); } @Override public List<JavaEnum> getJavaEnums() { List<JavaEnum> result = new ArrayList<JavaEnum>(); result.addAll( javaEnums.values() ); return result; } @Override public List<JavaEnum> getDependencyJavaEnums() { List<JavaEnum> result = new ArrayList<JavaEnum>(); result.addAll( dependencyJavaEnums.values() ); return result; } @Override public boolean isExternal( String className ) { return dependencyDataObjects.containsKey( className ); } @Override public boolean isEnum( String className ) { return javaEnums.containsKey( className ) || dependencyJavaEnums.containsKey( className ); } @Override public boolean equals( Object o ) { if ( this == o ) { return true; } if ( o == null || getClass( ) != o.getClass( ) ) { return false; } DataModelImpl dataModel = ( DataModelImpl ) o; if ( dataObjects != null ? !dataObjects.equals( dataModel.dataObjects ) : dataModel.dataObjects != null ) { return false; } if ( dependencyDataObjects != null ? !dependencyDataObjects.equals( dataModel.dependencyDataObjects ) : dataModel.dependencyDataObjects != null ) { return false; } if ( javaEnums != null ? !javaEnums.equals( dataModel.javaEnums ) : dataModel.javaEnums != null ) { return false; } return dependencyJavaEnums != null ? dependencyJavaEnums.equals( dataModel.dependencyJavaEnums ) : dataModel.dependencyJavaEnums == null; } @Override public int hashCode( ) { int result = dataObjects != null ? dataObjects.hashCode( ) : 0; result = ~~result; result = 31 * result + ( dependencyDataObjects != null ? dependencyDataObjects.hashCode( ) : 0 ); result = ~~result; result = 31 * result + ( javaEnums != null ? javaEnums.hashCode( ) : 0 ); result = ~~result; result = 31 * result + ( dependencyJavaEnums != null ? dependencyJavaEnums.hashCode( ) : 0 ); result = ~~result; return result; } }