Package org.objectstyle.wolips.eogenerator.core.model

Source Code of org.objectstyle.wolips.eogenerator.core.model.EOGeneratorModel

/*
* ====================================================================
*
* 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;
  }
}
TOP

Related Classes of org.objectstyle.wolips.eogenerator.core.model.EOGeneratorModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.