/** * */ package org.feature.multi.perspective.generator.viewmodel; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.feature.model.utilities.FeatureModelInit; import org.feature.model.utilities.HighQualityRandom; import org.feature.model.utilities.ResourceUtil; import org.feature.multi.perspective.mapping.viewmapping.MappingModel; import org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage; import org.feature.multi.perspective.model.viewmodel.GroupModel; import org.feature.multi.perspective.model.viewmodel.ViewmodelPackage; import org.js.model.feature.FeatureModel; import org.js.model.feature.FeaturePackage; /** * @author <a href=mailto:info@juliaschroeter.de>Julia Schroeter</a> * */ public class AbstractGenerator { private static Logger log = Logger.getLogger(AbstractGenerator.class); private static String generatedProject = "generatedProject"; protected static String viewmodelFolder = ViewmodelPackage.eNS_PREFIX; protected static String mappingFolder = ViewmappingPackage.eNS_PREFIX; protected static String featureFolder = FeaturePackage.eNS_PREFIX; //protected static String classificationFolder = ClassificationPackage.eNS_PREFIX; private Random generator; public static String balanced = "balanced"; public static String param_height = "_height"; public static String param_countChildren = "_countChildren"; public static String param_vpCount = "_vpCount"; public static String param_groupsVP = "_groupsVP"; public static String param_FCount = "_FCount"; public static String coreViewpointName = "V_Core"; public static boolean generateViewmodel = true; protected static int[] height = new int[] { 5 }; protected static int[] noMaxChildren = new int[] { 3 }; protected static int noGroupsAssignedToViewPoint = 3; protected static int[] noViewpoints = new int[] { 10 }; // 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }; protected static int[] assignedFeaturesPerGroup = new int[] { 3 }; public static boolean generateConsistentMapping = true; public static boolean reuseMapping = true; protected Random getRandomGenerator() { if (generator == null) { generator = new HighQualityRandom(); } return generator; } protected void persistModel(EObject model, String type, String nsPrefix, String modelFolder) { // String time = DateUtil.getFormattedCurrentTime(); IProject genProject = ResourceUtil.getProject(generatedProject); IFolder projectFolder = ResourceUtil.getProjectFolder(modelFolder, genProject); if (projectFolder != null) { IPath path = projectFolder.getRawLocation(); if (path != null) { String absoluteFileUri = path + "/" + type + "." + nsPrefix; log.info("Persist model " + absoluteFileUri); ResourceUtil.persistModel(model, absoluteFileUri); } try { projectFolder.refreshLocal(IResource.DEPTH_ZERO, null); } catch (CoreException e) { log.error("Could not refresh Folder " + projectFolder); } } } protected void saveGroupModel(GroupModel groupModel) { Resource resource = groupModel.eResource(); try { resource.save(null); } catch (IOException e) { log.error("Could not save changed groupModel"); } } protected List<GroupModel> getAllViewModels(ResourceSet resourceSet) { List<GroupModel> models = new ArrayList<GroupModel>(); IProject project = ResourceUtil.getProject(generatedProject); IFolder viewmodel = ResourceUtil.getProjectFolder(viewmodelFolder, project); try { List<IFile> files = ResourceUtil.getFiles(viewmodel); for (IFile file : files) { EObject model = ResourceUtil.getModel(file, resourceSet); if (model instanceof GroupModel) { GroupModel groupModel = (GroupModel) model; models.add(groupModel); } } } catch (CoreException e) { log.error("Could not load viewmodel files in the workspace"); } return models; } protected List<FeatureModel> getAllFeatureModels(ResourceSet set) { List<FeatureModel> models = new ArrayList<FeatureModel>(); IProject project = ResourceUtil.getProject(generatedProject); IFolder viewmodel = ResourceUtil.getProjectFolder(featureFolder, project); List<IFile> files; try { files = ResourceUtil.getFiles(viewmodel); for (IFile file : files) { FeatureModel model = FeatureModelInit.getFeatureModel(file, set); models.add(model); } } catch (CoreException e) { log.error("Could not load featuremodel files in the workspace"); } return models; } protected List<MappingModel> getAllMappingModels(ResourceSet resourceSet) { List<MappingModel> models = new ArrayList<MappingModel>(); IProject project = ResourceUtil.getProject(generatedProject); IFolder viewmodel = ResourceUtil.getProjectFolder(mappingFolder, project); try { List<IFile> files = ResourceUtil.getFiles(viewmodel); for (IFile file : files) { EObject model = ResourceUtil.getModel(file, resourceSet); if (model instanceof MappingModel) { MappingModel mappingModel = (MappingModel) model; models.add(mappingModel); } } } catch (CoreException e) { log.error("Could not load viewmodel files in the workspace"); } return models; } protected void cleanResourceSet(ResourceSet resourceSet) {} }