/*
* ====================================================================
*
* The ObjectStyle Group Software License, Version 1.0
*
* Copyright (c) 2006 The ObjectStyle Group and individual authors of the
* software. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowlegement: "This product includes software
* developed by the ObjectStyle Group (http://objectstyle.org/)." Alternately,
* this acknowlegement may appear in the software itself, if and wherever such
* third-party acknowlegements normally appear.
*
* 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse or
* promote products derived from this software without prior written permission.
* For written permission, please contact andrus@objectstyle.org.
*
* 5. Products derived from this software may not be called "ObjectStyle" nor
* may "ObjectStyle" appear in their names without prior written permission of
* the ObjectStyle Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* OBJECTSTYLE GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many individuals on
* behalf of the ObjectStyle Group. For more information on the ObjectStyle
* Group, please see <http://objectstyle.org/>.
*
*/
package org.objectstyle.wolips.eogenerator.core.model;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.core.resources.IFile;
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.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.objectstyle.wolips.eomodeler.core.model.EOModel;
import org.objectstyle.wolips.eomodeler.core.model.EOModelGroup;
import org.objectstyle.wolips.preferences.Preferences;
public class EOGeneratorModel {
public static final String EOGENERATOR_PATH = "eogeneratorPath";
public static final String MODELS = "models";
public static final String REF_MODELS = "refModels";
public static final String DESTINATION = "destination";
public static final String SUBCLASS_DESTINATION = "subclassDestination";
public static final String TEMPLATE_DIR = "templateDir";
public static final String JAVA_TEMPLATE = "javaTemplate";
public static final String SUBCLASS_JAVA_TEMPLATE = "subclassJavaTemplate";
public static final String DEFINES = "defines";
public static final String PACKAGE_DIRS = "packageDirs";
public static final String JAVA = "java";
public static final String JAVA_CLIENT = "javaClient";
public static final String JAVA_CLIENT_COMMON = "javaClientCommon";
public static final String VERBOSE = "verbose";
public static final String PREFIX = "prefix";
public static final String FILENAME_TEMPLATE = "filenameTemplate";
public static final String CUSTOM_SETTINGS = "customSettings";
public static final String DIRTY = "dirty";
public static final String SUPERCLASS_PACKAGE = "superclassPackage";
public static final String LOAD_MODEL_GROUP = "loadModelGroup";
public static final String EXTENSION = "extension";
private PropertyChangeSupport _propertyChangeSupport;
private IPath _projectPath;
private String _eogeneratorPath;
private List<EOModelReference> _models;
private List<EOModelReference> _refModels;
private String _destination;
private String _subclassDestination;
private String _templateDir;
private String _javaTemplate;
private String _subclassJavaTemplate;
private List<Define> _defines;
private Boolean _packageDirs;
private Boolean _java;
private Boolean _javaClient;
private Boolean _javaClientCommon;
private Boolean _verbose;
private Boolean _loadModelGroup;
private String _prefix;
private String _filenameTemplate;
private String _superclassPackage;
private List<String> _customSettings;
private boolean _dirty;
private String _defaultEOGeneratorPath;
private String _defaultTemplateDir;
private String _defaultJavaTemplate;
private String _defaultSubclassJavaTemplate;
private boolean _java14;
private String _extension;
public EOGeneratorModel(IProject project, String lineInfo) throws ParseException {
this(project);
readFromString(lineInfo);
}
public EOGeneratorModel(IProject project) {
this(project.getLocation());
}
public EOGeneratorModel(IPath projectPath) {
this();
_projectPath = projectPath;
}
public EOGeneratorModel() {
_propertyChangeSupport = new PropertyChangeSupport(this);
_models = new LinkedList<EOModelReference>();
_refModels = new LinkedList<EOModelReference>();
_defines = new LinkedList<Define>();
_customSettings = new LinkedList<String>();
try {
_defaultEOGeneratorPath = Preferences.getEOGeneratorPath();
_defaultTemplateDir = Preferences.getEOGeneratorTemplateDir();
_defaultJavaTemplate = Preferences.getEOGeneratorJavaTemplate();
_defaultSubclassJavaTemplate = Preferences.getEOGeneratorSubclassJavaTemplate();
_java14 = Preferences.isEOGeneratorJava14();
_extension = "java";
}
catch (NoClassDefFoundError e) {
// IGNORE THIS -- We're not running in Eclipse
}
catch (NullPointerException e) {
// IGNORE THIS -- We're not running in Eclipse
}
}
public void setJava14(boolean java14) {
_java14 = java14;
}
public boolean isJava14() {
return _java14;
}
public void setDefaultEOGeneratorPath(String defaultEOGeneratorPath) {
_defaultEOGeneratorPath = defaultEOGeneratorPath;
}
public String getDefaultEOGeneratorPath() {
return _defaultEOGeneratorPath;
}
public void setDefaultTemplateDir(String defaultTemplateDir) {
_defaultTemplateDir = defaultTemplateDir;
}
public String getDefaultTemplateDir() {
return _defaultTemplateDir;
}
public String getDefaultJavaTemplate() {
return _defaultJavaTemplate;
}
public void setDefaultJavaTemplate(String defaultJavaTemplate) {
_defaultJavaTemplate = defaultJavaTemplate;
}
public String getDefaultSubclassJavaTemplate() {
return _defaultSubclassJavaTemplate;
}
public void setDefaultSubclassJavaTemplate(String defaultSubclassJavaTemplate) {
_defaultSubclassJavaTemplate = defaultSubclassJavaTemplate;
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
_propertyChangeSupport.addPropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
_propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
_propertyChangeSupport.removePropertyChangeListener(listener);
}
public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
_propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
}
public void writeToFile(IFile file, IProgressMonitor monitor) throws CoreException, IOException {
String eogenFileContents = writeToString(null);
InputStream stream = new ByteArrayInputStream(eogenFileContents.getBytes("UTF-8"));
if (file.exists()) {
file.setContents(stream, true, true, monitor);
} else {
file.create(stream, true, monitor);
}
stream.close();
setDirty(false);
}
protected static String toFullPath(File workingDirectory, String path) {
String fullPath;
if (path == null) {
fullPath = null;
} else if (workingDirectory == null) {
fullPath = path;
} else {
File f = new File(path);
if (f.isAbsolute()) {
fullPath = path;
} else {
f = new File(workingDirectory, path);
fullPath = f.getAbsolutePath();
}
}
return fullPath;
}
public String writeToString(File workingDirectory) {
StringBuffer sb = new StringBuffer();
sb.append(escape(getEOGeneratorPath(), false));
append(sb, "-destination", EOGeneratorModel.toFullPath(workingDirectory, _destination));
append(sb, "-extension", getExtension());
append(sb, "-filenameTemplate", _filenameTemplate);
append(sb, "-java", _java);
append(sb, "-javaclient", _javaClient);
append(sb, "-javaclientcommon", _javaClientCommon);
append(sb, "-javaTemplate", getJavaTemplate());
Iterator modelsIter = _models.iterator();
while (modelsIter.hasNext()) {
EOModelReference model = (EOModelReference) modelsIter.next();
append(sb, "-model", EOGeneratorModel.toFullPath(workingDirectory, model.getPath(_projectPath)));
}
append(sb, "-packagedirs", _packageDirs);
append(sb, "-prefix", _prefix);
Iterator refModelsIter = _refModels.iterator();
while (refModelsIter.hasNext()) {
EOModelReference refModel = (EOModelReference) refModelsIter.next();
append(sb, "-refmodel", EOGeneratorModel.toFullPath(workingDirectory, refModel.getPath(_projectPath)));
}
append(sb, "-subclassDestination", EOGeneratorModel.toFullPath(workingDirectory, _subclassDestination));
append(sb, "-subclassJavaTemplate", getSubclassJavaTemplate());
append(sb, "-templatedir", EOGeneratorModel.toFullPath(workingDirectory, getTemplateDir()));
append(sb, "-verbose", _verbose);
append(sb, "-loadModelGroup", _loadModelGroup);
append(sb, "-superclassPackage", _superclassPackage);
Iterator definesIter = _defines.iterator();
while (definesIter.hasNext()) {
Define define = (Define) definesIter.next();
String name = define.getName();
String value = define.getValue();
append(sb, "-define-" + name, value);
}
return sb.toString();
}
public void readFromString(String str) throws ParseException {
readFromString(str, null);
}
public void readFromString(String str, File workingDir) throws ParseException {
_models.clear();
_refModels.clear();
_defines.clear();
_customSettings.clear();
CommandLineTokenizer tokenizer = new CommandLineTokenizer(str);
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
if (_eogeneratorPath == null && !token.startsWith("-")) {
_eogeneratorPath = token;
} else if (token.startsWith("-")) {
if ("-destination".equalsIgnoreCase(token)) {
_destination = workingDir == null ? nextTokenValue(token, tokenizer) : PathUtils.getAbsolutePath(nextTokenValue(token, tokenizer), workingDir);
} else if ("-extension".equalsIgnoreCase(token)) {
_extension = nextTokenValue(token, tokenizer);
} else if ("-filenameTemplate".equalsIgnoreCase(token)) {
_filenameTemplate = nextTokenValue(token, tokenizer);
} else if ("-java".equalsIgnoreCase(token)) {
_java = Boolean.TRUE;
} else if ("-javaclient".equalsIgnoreCase(token)) {
_javaClient = Boolean.TRUE;
} else if ("-javaclientcommon".equalsIgnoreCase(token)) {
_javaClientCommon = Boolean.TRUE;
} else if ("-javaTemplate".equalsIgnoreCase(token)) {
_javaTemplate = nextTokenValue(token, tokenizer);
} else if ("-model".equalsIgnoreCase(token)) {
String modelPath = workingDir == null ? nextTokenValue(token, tokenizer) : PathUtils.getAbsolutePath(nextTokenValue(token, tokenizer), workingDir);
_models.add(new EOModelReference(new Path(modelPath)));
} else if ("-packagedirs".equalsIgnoreCase(token)) {
_packageDirs = Boolean.TRUE;
} else if ("-prefix".equalsIgnoreCase(token)) {
_prefix = nextTokenValue(token, tokenizer);
} else if ("-refmodel".equalsIgnoreCase(token)) {
String refModelPath = workingDir == null ? nextTokenValue(token, tokenizer) : PathUtils.getAbsolutePath(nextTokenValue(token, tokenizer), workingDir);
_refModels.add(new EOModelReference(new Path(refModelPath)));
} else if ("-subclassDestination".equalsIgnoreCase(token)) {
_subclassDestination = workingDir == null ? nextTokenValue(token, tokenizer) : PathUtils.getAbsolutePath(nextTokenValue(token, tokenizer), workingDir);
} else if ("-subclassJavaTemplate".equalsIgnoreCase(token)) {
_subclassJavaTemplate = nextTokenValue(token, tokenizer);
} else if ("-templatedir".equalsIgnoreCase(token)) {
_templateDir = workingDir == null ? nextTokenValue(token, tokenizer) : PathUtils.getAbsolutePath(nextTokenValue(token, tokenizer), workingDir);
} else if ("-verbose".equalsIgnoreCase(token)) {
_verbose = Boolean.TRUE;
} else if ("-loadModelGroup".equalsIgnoreCase(token)) {
_loadModelGroup = Boolean.TRUE;
} else if ("-superclassPackage".equalsIgnoreCase(token)) {
_superclassPackage = nextTokenValue(token, tokenizer);
} else if (token.startsWith("-define-")) {
String name = token.substring("-define-".length());
String value = nextTokenValue(token, tokenizer);
Define define = new Define(name, value);
_defines.add(define);
} else {
_customSettings.add(token);
}
} else {
_customSettings.add(token);
}
}
_dirty = false;
}
protected void append(StringBuffer _buffer, String _name, Boolean _value) {
if (_value != null && _value.booleanValue()) {
if (_buffer.length() > 0) {
_buffer.append(" \\\n");
}
_buffer.append(" ");
_buffer.append(_name);
}
}
protected void append(StringBuffer _buffer, String _name, String _value) {
if (_value != null && _value.trim().length() > 0) {
if (_buffer.length() > 0) {
_buffer.append(" \\\n");
}
_buffer.append(" ");
_buffer.append(_name);
_buffer.append(" ");
_buffer.append(escape(_value, true));
}
}
protected String escape(String value, boolean quotes) {
String escapedValue;
if (value == null) {
escapedValue = null;
} else if (value.indexOf(' ') == -1 && value.trim().length() > 0) {
escapedValue = value;
} else if (quotes) {
StringBuffer valueBuffer = new StringBuffer();
valueBuffer.append("\"");
valueBuffer.append(value);
valueBuffer.append("\"");
escapedValue = valueBuffer.toString();
} else {
escapedValue = value.replaceAll(" ", "\\ ");
}
return escapedValue;
}
protected String nextTokenValue(String previousToken, CommandLineTokenizer tokenizer) throws ParseException {
if (!tokenizer.hasMoreTokens()) {
throw new ParseException(previousToken + " must be followed by a value.", -1);
}
String token = tokenizer.nextToken().trim();
return token;
}
public IPath getProjectPath() {
return _projectPath;
}
public void addDefine(Define define) {
_defines.add(define);
}
public void setDefine(String name, String value) {
Define define = getDefineNamed(name);
if (define == null) {
addDefine(new Define(name, value));
} else {
define.setValue(value);
}
}
public Define getDefineNamed(String name) {
for (Define define : getDefines()) {
if (name.equals(define.getName())) {
return define;
}
}
return null;
}
public String getDefineValueNamed(String name) {
Define define = getDefineNamed(name);
if (define != null) {
return define.getValue();
}
return null;
}
public List<Define> getDefines() {
return _defines;
}
public void setDefines(List<Define> defines) {
List<Define> oldDefines = _defines;
_defines = defines;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.DEFINES, oldDefines, _defines);
setDirty(true);
}
public String getDestination() {
return _destination;
}
public void setDestination(String destination) {
if (isNew(_destination, destination)) {
String oldDestination = _destination;
_destination = destination;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.DESTINATION, oldDestination, _destination);
setDirty(true);
}
}
public String getEOGeneratorPath() {
String eoGeneratorPath = _eogeneratorPath;
if (_eogeneratorPath == null || _eogeneratorPath.trim().length() == 0) {
eoGeneratorPath = _defaultEOGeneratorPath;
}
return eoGeneratorPath;
}
public void setEOGeneratorPath(String eogeneratorPath) {
setEOGeneratorPath(eogeneratorPath, false);
}
public void setEOGeneratorPath(String eogeneratorPath, boolean markAsDirty) {
if (isNew(_eogeneratorPath, eogeneratorPath)) {
String oldEOGeneratorPath = _eogeneratorPath;
_eogeneratorPath = eogeneratorPath;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.EOGENERATOR_PATH, oldEOGeneratorPath, _eogeneratorPath);
setDirty(markAsDirty);
}
}
public Boolean getJavaClientCommon() {
return isJavaClientCommon();
}
public Boolean isJavaClientCommon() {
return _javaClientCommon;
}
public void setJavaClientCommon(Boolean javaClientCommon) {
Boolean oldJavaClientCommon = _javaClient;
_javaClientCommon = javaClientCommon;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.JAVA_CLIENT_COMMON, oldJavaClientCommon, _javaClientCommon);
setDirty(true);
}
public Boolean getJavaClient() {
return isJavaClient();
}
public Boolean isJavaClient() {
return _javaClient;
}
public void setJavaClient(Boolean javaClient) {
Boolean oldJavaClient = _javaClient;
_javaClient = javaClient;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.JAVA_CLIENT, oldJavaClient, _javaClient);
setDirty(true);
}
public Boolean getJava() {
return isJava();
}
public Boolean isJava() {
return _java;
}
public void setJava(Boolean java) {
Boolean oldJava = _java;
_java = java;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.JAVA, oldJava, _java);
setDirty(true);
}
public String getJavaTemplate() {
String javaTemplate = _javaTemplate;
if (_javaTemplate == null || _javaTemplate.trim().length() == 0) {
javaTemplate = _defaultJavaTemplate;
}
return javaTemplate;
}
public void setJavaTemplate(String javaTemplate) {
if (isNew(_javaTemplate, javaTemplate)) {
String oldJavaTemplate = _javaTemplate;
_javaTemplate = javaTemplate;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.JAVA_TEMPLATE, oldJavaTemplate, _javaTemplate);
setDirty(true);
}
}
protected boolean isNew(String oldValue, String newValue) {
boolean isNew;
if (oldValue == null && newValue != null && newValue.trim().length() > 0) {
isNew = true;
} else if (oldValue != null && !oldValue.equals(newValue)) {
isNew = true;
} else {
isNew = false;
}
return isNew;
}
public List<EOModelReference> getModels() {
return _models;
}
public void setModels(List<EOModelReference> models) {
List<EOModelReference> oldModels = _models;
_models = models;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.MODELS, oldModels, _models);
setDirty(true);
}
public void addModel(EOModelReference modelReference) {
List<EOModelReference> oldModels = new LinkedList<EOModelReference>(_models);
_models.add(modelReference);
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.MODELS, oldModels, _models);
setDirty(true);
}
public Boolean getPackageDirs() {
return isPackageDirs();
}
public Boolean isPackageDirs() {
return _packageDirs;
}
public void setPackageDirs(Boolean packageDirs) {
Boolean oldPackageDirs = _packageDirs;
_packageDirs = packageDirs;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.PACKAGE_DIRS, oldPackageDirs, _packageDirs);
setDirty(true);
}
public List<EOModelReference> getRefModels() {
return _refModels;
}
public void setRefModels(List<EOModelReference> refModels) {
List<EOModelReference> oldRefModels = _refModels;
_refModels = refModels;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.REF_MODELS, oldRefModels, _refModels);
setDirty(true);
}
public void addRefModel(EOModelReference modelReference) {
List<EOModelReference> oldRefModels = new LinkedList<EOModelReference>(_refModels);
_refModels.add(modelReference);
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.REF_MODELS, oldRefModels, _refModels);
setDirty(true);
}
public String getExtension() {
return _extension;
}
public void setExtension(String extension) {
if (isNew(_extension, extension)) {
String oldExtension = _extension;
_extension = extension;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.EXTENSION, oldExtension, _extension);
setDirty(true);
}
}
public String getSubclassDestination() {
return _subclassDestination;
}
public void setSubclassDestination(String subclassDestination) {
if (isNew(_subclassDestination, subclassDestination)) {
String oldSubclassDestination = _subclassDestination;
_subclassDestination = subclassDestination;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.SUBCLASS_DESTINATION, oldSubclassDestination, _subclassDestination);
setDirty(true);
}
}
public String getSubclassJavaTemplate() {
String subclassJavaTemplate = _subclassJavaTemplate;
if (_subclassJavaTemplate == null || _subclassJavaTemplate.trim().length() == 0) {
subclassJavaTemplate = _defaultSubclassJavaTemplate;
}
return subclassJavaTemplate;
}
public void setSubclassJavaTemplate(String subclassJavaTemplate) {
if (isNew(_subclassJavaTemplate, subclassJavaTemplate)) {
String oldSubclassJavaTemplate = _subclassJavaTemplate;
_subclassJavaTemplate = subclassJavaTemplate;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.SUBCLASS_JAVA_TEMPLATE, oldSubclassJavaTemplate, _subclassJavaTemplate);
setDirty(true);
}
}
public String getTemplateDir() {
String templateDir = _templateDir;
if (_templateDir == null || _templateDir.trim().length() == 0) {
templateDir = _defaultTemplateDir;
}
if (templateDir != null) {
templateDir = PathUtils.getRelativePath(_projectPath, new Path(templateDir));
}
return templateDir;
}
public void setTemplateDir(String templateDir) {
if (isNew(_templateDir, templateDir)) {
String oldTemplateDir = _templateDir;
_templateDir = templateDir;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.TEMPLATE_DIR, oldTemplateDir, _templateDir);
setDirty(true);
}
}
public void setPrefix(String prefix) {
if (isNew(_prefix, prefix)) {
String oldPrefix = _prefix;
_prefix = prefix;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.PREFIX, oldPrefix, _prefix);
setDirty(true);
}
}
public String getPrefix() {
return _prefix;
}
public void setFilenameTemplate(String filenameTemplate) {
if (isNew(_filenameTemplate, filenameTemplate)) {
String oldFilenameTemplate = _filenameTemplate;
_filenameTemplate = filenameTemplate;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.FILENAME_TEMPLATE, oldFilenameTemplate, _filenameTemplate);
setDirty(true);
}
}
public String getFilenameTemplate() {
return _filenameTemplate;
}
public void setSuperclassPackage(String superclassPackage) {
if (isNew(_superclassPackage, superclassPackage)) {
String oldSuperclassPackage = _superclassPackage;
_superclassPackage = superclassPackage;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.SUPERCLASS_PACKAGE, oldSuperclassPackage, _superclassPackage);
setDirty(true);
}
}
public String getSuperclassPackage() {
return _superclassPackage;
}
public Boolean getVerbose() {
return isVerbose();
}
public Boolean isVerbose() {
return _verbose;
}
public void setVerbose(Boolean verbose) {
Boolean oldVerbose = _verbose;
_verbose = verbose;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.VERBOSE, oldVerbose, _verbose);
setDirty(true);
}
public void setLoadModelGroup(Boolean loadModelGroup) {
Boolean oldLoadModelGroup = _loadModelGroup;
_loadModelGroup = loadModelGroup;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.LOAD_MODEL_GROUP, oldLoadModelGroup, _loadModelGroup);
setDirty(true);
}
public Boolean isLoadModelGroup() {
return _loadModelGroup;
}
public Boolean getLoadModelGroup() {
return isLoadModelGroup();
}
public void setDirty(boolean dirty) {
boolean oldDirty = _dirty;
_dirty = dirty;
_propertyChangeSupport.firePropertyChange(EOGeneratorModel.DIRTY, oldDirty, _dirty);
}
public boolean isDirty() {
return _dirty;
}
public boolean isModelReferenced(EOModelReference modelReference) {
boolean modelReferenced = false;
String eomodelName = modelReference.getName();
Iterator modelsIter = _models.iterator();
while (!modelReferenced && modelsIter.hasNext()) {
EOModelReference model = (EOModelReference) modelsIter.next();
modelReferenced = model.getName().equals(eomodelName);
}
if (!modelReferenced) {
Iterator refModelsIter = _refModels.iterator();
while (!modelReferenced && refModelsIter.hasNext()) {
EOModelReference model = (EOModelReference) refModelsIter.next();
modelReferenced = model.getName().equals(eomodelName);
}
}
return modelReferenced;
}
public static class Define {
private String _name;
private String _value;
public Define(String name, String value) {
_name = name;
_value = value;
}
public int hashCode() {
return _name.hashCode();
}
public boolean equals(Object obj) {
return (obj instanceof Define && ((Define) obj)._name.equals(_name));
}
public String getName() {
return _name;
}
public String getValue() {
return _value;
}
public void setValue(String value) {
_value = value;
}
}
public static EOGeneratorModel createModelFromFile(IFile file) throws ParseException, CoreException, IOException {
file.refreshLocal(IResource.DEPTH_INFINITE, null);
InputStream eogenFileStream = file.getContents();
try {
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(eogenFileStream));
String line;
while ((line = br.readLine()) != null) {
sb.append(line.replaceFirst("\\\\$", ""));
}
String string = sb.toString();
string.replace('\\', '/');
EOGeneratorModel model = new EOGeneratorModel(file.getProject(), string);
model.setEOGeneratorPath(Preferences.getEOGeneratorPath(), false);
return model;
} finally {
eogenFileStream.close();
}
}
/*
* public static EOGeneratorModel createDefaultModel(IProject project) {
* EOGeneratorModel model = new EOGeneratorModel(project);
* model.setJava(Boolean.TRUE); model.setPackageDirs(Boolean.TRUE);
* model.setVerbose(Boolean.TRUE); //
* model.setEOGeneratorPath(Preferences.getEOGeneratorPath()); //
* model.setJavaTemplate(Preferences.getEOGeneratorJavaTemplate()); //
* model.setTemplateDir(Preferences.getEOGeneratorTemplateDir()); //
* model.setSubclassJavaTemplate(Preferences.getEOGeneratorSubclassJavaTemplate());
* try { IJavaProject javaProject = JavaCore.create(project); if
* (javaProject != null) { IClasspathEntry[] classpathEntry =
* javaProject.getRawClasspath(); for (int classpathEntryNum = 0;
* classpathEntryNum < classpathEntry.length; classpathEntryNum++) {
* IClasspathEntry entry = classpathEntry[classpathEntryNum]; if
* (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) { IPath path =
* entry.getPath(); if (path != null) { IFolder sourceFolder =
* project.getWorkspace().getRoot().getFolder(path); IPath
* projectRelativePath = sourceFolder.getProjectRelativePath(); String
* projectRelativePathStr = projectRelativePath.toPortableString();
* model.setDestination(projectRelativePathStr);
* model.setSubclassDestination(projectRelativePathStr); } } } } } catch
* (JavaModelException e) { e.printStackTrace(); } return model; }
*/
/**
* Creates a set of model references for all of the models in a model group
* other than the given models.
*
* @param modelGroup the model group to load
* @param exceptModels defines the models to skip
* @return a list of model references for all other models in the model group
*/
public static List<EOModelReference> createModelReferencesForModelGroup(EOModelGroup modelGroup, List<EOModel> exceptModels) {
LinkedList<EOModelReference> modelReferences = new LinkedList<EOModelReference>();
Iterator<EOModel> modelsIter = modelGroup.getModels().iterator();
while (modelsIter.hasNext()) {
EOModel modelGroupModel = modelsIter.next();
if (modelGroupModel.getModelURL() != null) {
Path modelPath = new Path(modelGroupModel.getModelURL().toString());
EOModelReference modelReference = new EOModelReference(modelPath);
if (!exceptModels.contains(modelGroupModel)) {
modelReferences.add(modelReference);
}
}
}
return modelReferences;
}
}