Package org.objectstyle.wolips.variables

Source Code of org.objectstyle.wolips.variables.BuildProperties

package org.objectstyle.wolips.variables;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.objectstyle.woenvironment.frameworks.Root;
import org.objectstyle.woenvironment.frameworks.Version;
import org.objectstyle.woenvironment.plist.ToHellWithProperties;

public class BuildProperties {
  private IProject _project;

  private Properties _properties;

  private boolean _dirty;

  private long _version;

  public BuildProperties(IProject project) {
    _project = project;
    _version = -1;
    load();
  }

  public boolean isDirty() {
    return _dirty;
  }

  public IProject getProject() {
    return _project;
  }

  public IFile getBuildPropertiesEclipseFile() {
    IFile file = _project.getFile("build.properties");
    return file;
  }

  public File getBuildPropertiesFile() {
    File file = getBuildPropertiesEclipseFile().getLocation().toFile();
    return file;
  }

  public long getModificationStamp() {
    File file = getBuildPropertiesFile();
    if (_version == -1 && file.exists()) {
      _version = file.lastModified();
    }
    return _version;
  }

  public synchronized void setProperties(Properties properties) {
    if (!_properties.equals(properties)) {
      _properties = properties;
      _dirty = true;
    }
  }

  public synchronized Properties getProperties() {
    Properties cloneProperties = new Properties();
    cloneProperties.putAll(_properties);
    return cloneProperties;
  }

  public synchronized boolean getBoolean(String key, boolean defaultValue) {
    String strValue = get(key);
    boolean value;
    if (strValue == null) {
      value = defaultValue;
    }
    else {
      value = "true".equalsIgnoreCase(strValue);
    }
    return value;
  }

  public synchronized String get(String key) {
    return get(key, null);
  }

  public synchronized String get(String key, String defaultValue) {
    String value = _properties.getProperty(key, defaultValue);
    return value;
  }

  public synchronized void remove(String key) {
    put(key, null);
  }

  public synchronized void put(String key, boolean value) {
    put(key, Boolean.valueOf(value).toString());
  }

  public synchronized void put(String key, String value) {
    if (value == null) {
      if (_properties.containsKey(key)) {
        _properties.remove(key);
        _dirty = true;
      }
    }
    else {
      String oldValue = get(key);
      if (!value.equals(oldValue)) {
        _properties.setProperty(key, value);
        _dirty = true;
      }
    }
  }

  protected void load() {
    try {
      boolean dirty;
     
      Properties properties = new Properties();
      File file = getBuildPropertiesFile();
      if (file.exists()) {
        InputStream inputStream = new FileInputStream(file);
        try {
          properties.load(inputStream);
        }
        finally {
          inputStream.close();
        }
        dirty = false;
      }
      else {
        dirty = true;
      }
     
      synchronized (this) {
        _dirty = dirty;
        _properties = properties;
      }
    }
    catch (Exception e) {
      throw new RuntimeException("Failed to load the build properties for the project '" + _project + "'.", e);
    }
  }

  public synchronized void save() throws CoreException, IOException {
    Properties properties = new ToHellWithProperties();
    properties.putAll(_properties);
   
    if (!_dirty) {
      return;
    }

    File file = getBuildPropertiesFile();
    FileOutputStream fos = new FileOutputStream(file);
    try {
      properties.store(fos, null);
    }
    finally {
      fos.close();
    }

    ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {
      public void run(IProgressMonitor monitor) throws CoreException {
        getBuildPropertiesEclipseFile().refreshLocal(IResource.DEPTH_ONE, monitor);
      }
    }, null);
   
    _dirty = false;
  }

  public String getName() {
    String projectName = get("project.name");
    // MS: compatibility with old build.properties
    if (projectName == null || projectName.length() == 0) {
      projectName = get("framework.name");
    }
    if (projectName == null || projectName.length() == 0) {
      projectName = _project.getName();
    }
    return projectName;
  }

  public void setName(String name) {
    put("project.name", name);
    put("project.name.lowercase", name.toLowerCase());
  }

  public boolean getWebXML() {
    return getBoolean("webXML", false);
  }

  public void setWebXML(boolean webXML) {
    put("webXML", webXML);
  }

  public boolean isServletDeployment() {
    return getBoolean("servletDeployment", false);
  }

  public void setServletDeployment(boolean servletDeployment) {
    if (servletDeployment) {
      put("servletDeployment", servletDeployment);
    }
    else {
      remove("servletDeployment");
    }
  }

  public String getWebXML_CustomContent(boolean convertNullValueToEmptyString) {
    return get("webXML_CustomContent", convertNullValueToEmptyString ? "" : null);
  }

  /**
   * @param webXML_CustomContent
   *            webxml custom content
   */
  public void setWebXML_CustomContent(String webXML_CustomContent) {
    put("webXML_CustomContent", webXML_CustomContent);
  }

  public String getEOGeneratorArgs(boolean convertNullValueToEmptyString) {
    return get("eogeneratorArgs", convertNullValueToEmptyString ? "" : null);
  }

  public void setEOGeneratorArgs(String eogeneratorArgs) {
    put("eogeneratorArgs", eogeneratorArgs);
  }

  public String getPrincipalClass() {
    return getPrincipalClass(false);
  }
 
  /**
   * @param convertNullValueToEmptyString
   * @return principalClass.
   */
  public String getPrincipalClass(boolean convertNullValueToEmptyString) {
    return get("principalClass", convertNullValueToEmptyString ? "" : null);
  }

  /**
   * @param principalClass
   *            the principalClass for the Info.plist
   */
  public void setPrincipalClass(String principalClass) {
    put("principalClass", (principalClass == null) ? "" : principalClass);
  }

  public boolean isEmbed(Root root) {
    String shortName = root.getShortName();
    return getBoolean("embed." + shortName, false);
  }

  public void setEmbed(Root root, boolean embed) {
    String shortName = root.getShortName();
    if (!embed) {
      remove("embed." + shortName);
    }
    else {
      put("embed." + shortName, embed);
    }
  }

  public String getCustomInfoPListContent() {
    return getCustomInfoPListContent(false);
  }

  /**
   * @param convertNullValueToEmptyString
   * @return The CustomContent for the Info.plist
   */
  public String getCustomInfoPListContent(boolean convertNullValueToEmptyString) {
    return get("customInfoPListContent", convertNullValueToEmptyString ? "" : null);
  }

  /**
   * @param customInfoPListContent
   *            The CustomContent for the Info.plist
   */
  public void setCustomInfoPListContent(String customInfoPListContent) {
    put("customInfoPListContent", (customInfoPListContent == null) ? "" : customInfoPListContent);
  }

  public String getEOAdaptorClassName() {
    return getEOAdaptorClassName(false);
  }
 
  /**
   * @param convertNullValueToEmptyString
   * @return The EOAdaptorClassName for the Info.plist
   */
  public String getEOAdaptorClassName(boolean convertNullValueToEmptyString) {
    return get("eoAdaptorClassName", convertNullValueToEmptyString ? "" : null);
  }

  /**
   * @param eoAdaptorClassName
   *            the eoadaptorclassname for the Info.plist
   */
  public void setEOAdaptorClassName(String eoAdaptorClassName) {
    put("eoAdaptorClassName", (eoAdaptorClassName == null) ? "" : eoAdaptorClassName);
  }

  public String getProjectFrameworkFolder() {
    return get("projectFrameworkFolder");
  }

  public void setProjectFrameworkFolder(String projectFrameworkFolder) {
    put("projectFrameworkFolder", projectFrameworkFolder);
  }

  public void setJavaClient(boolean javaClient) {
    if (javaClient) {
      put("javaClient", javaClient);
    }
    else {
      remove("javaClient");
    }
  }

  public boolean isJavaClient() {
    return getBoolean("javaClient", false);
  }

  public void setJavaWebStart(boolean javaWebStart) {
    if (javaWebStart) {
      put("javaWebStart", javaWebStart);
    }
    else {
      remove("javaWebStart");
    }
  }

  public boolean isJavaWebStart() {
    return getBoolean("javaWebStart", false);
  }

  public boolean hasValidProjectType() {
    String projectType = get("project.type");
    return "application".equals(projectType) || "framework".equals(projectType);
  }

  public boolean isFramework() {
    boolean isFramework = false;
    String projectType = get("project.type");
    if (projectType != null) {
      isFramework = "framework".equals(projectType);
    }
    else {
      // MS: compatibility with old build.properties
      String frameworkName = get("framework.name");
      if (frameworkName != null) {
        isFramework = true;
      }
    }
    return isFramework;
  }

  public void setFramework(boolean framework) {
    if (framework) {
      put("project.type", "framework");
    }
    else {
      put("project.type", "application");
    }
  }
 
  public String getBundleType() {
    return isFramework() ? "FMWK" : "APPL";
  }
 
  private boolean _defaultsInitialized;

  private Version _woVersionDefault;

  private Version _versionDefault;

  private String _inlineBindingPrefixDefault;

  private String _inlineBindingSuffixDefault;

  private boolean _wellFormedTemplateRequiredDefault;

  public void _copyDefaultsFrom(BuildProperties props) {
    if (props._defaultsInitialized) {
      _woVersionDefault = props._woVersionDefault;
      _inlineBindingPrefixDefault = props._inlineBindingPrefixDefault;
      _inlineBindingSuffixDefault = props._inlineBindingSuffixDefault;
      _wellFormedTemplateRequiredDefault = props._wellFormedTemplateRequiredDefault;
      _defaultsInitialized = true;
    }
  }

  protected synchronized void ensureDefaultsInitialized() {
    if (!_defaultsInitialized) {
      _defaultsInitialized = true;
      _woVersionDefault = new Version(VariablesPlugin.getDefault().getGlobalVariables().getString("wo.version", "5.3.3"));
      _inlineBindingPrefixDefault = VariablesPlugin.getDefault().getGlobalVariables().getString("component.inlineBindingPrefix", "[");
      _inlineBindingSuffixDefault = VariablesPlugin.getDefault().getGlobalVariables().getString("component.inlineBindingSuffix", "]");
      // MS: This is pretty hacky -- Technically this plugin doesn't depend on the Bindings preference plugin, and I don't want to add it because it brings in a bunch
      // of JDT dependencies that we don't want here, but I can't move the preferences out of the plugin easily without changing their key name.
      _wellFormedTemplateRequiredDefault = VariablesPlugin.getDefault().getGlobalVariables().getBoolean("component.wellFormedTemplateRequired", "yes".equals(Platform.getPreferencesService().getString("org.objectstyle.wolips.bindings", "WellFormedTemplate", null, null)));
      BuildPropertiesAdapterFactory.initializeBuildPropertiesDefaults(this);
    }
  }

  public void setWOVersionDefault(Version woVersionDefault) {
    _woVersionDefault = woVersionDefault;
  }

  public Version getWOVersionDefault() {
    ensureDefaultsInitialized();
    return _woVersionDefault;
  }

  public void setVersionDefault(Version versionDefault) {
    _versionDefault = versionDefault;
  }
 
  public Version getVersionDefault() {
    ensureDefaultsInitialized();
    return _versionDefault;
  }
 
  public void setVersion(Version version) {
    if (version != null) {
      put("version", version.getVersionStr());
    }
    else {
      remove("version");
    }
  }

  public Version getVersion() {
    Version versionDefault = getVersionDefault();
    return new Version(get("version", versionDefault == null ? null : versionDefault.getVersionStr()));
  }
 
  public void setWOVersion(Version woVersion) {
    if (woVersion != null) {
      put("wo.version", woVersion.getVersionStr());
    }
    else {
      remove("wo.version");
    }
  }

  public Version getWOVersion() {
    Version woVersionDefault = getWOVersionDefault();
    return new Version(get("wo.version", woVersionDefault == null ? null : woVersionDefault.getVersionStr()));
  }

  public void setInlineBindingPrefixDefault(String inlineBindingPrefixDefault) {
    _inlineBindingPrefixDefault = inlineBindingPrefixDefault;
  }

  public String getInlineBindingPrefixDefault() {
    ensureDefaultsInitialized();
    return _inlineBindingPrefixDefault;
  }

  public void setInlineBindingPrefix(String inlineBindingPrefix) {
    if (inlineBindingPrefix != null) {
      put("component.inlineBindingPrefix", inlineBindingPrefix);
    }
    else {
      remove("component.inlineBindingPrefix");
    }
  }

  public String getInlineBindingPrefix() {
    return get("component.inlineBindingPrefix", getInlineBindingPrefixDefault());
  }

  public void setInlineBindingSuffixDefault(String inlineBindingSuffixDefault) {
    _inlineBindingSuffixDefault = inlineBindingSuffixDefault;
  }

  public String getInlineBindingSuffixDefault() {
    ensureDefaultsInitialized();
    return _inlineBindingSuffixDefault;
  }

  public void setInlineBindingSuffix(String inlineBindingSuffix) {
    if (inlineBindingSuffix != null) {
      put("component.inlineBindingSuffix", inlineBindingSuffix);
    }
    else {
      remove("component.inlineBindingSuffix");
    }
  }

  public String getInlineBindingSuffix() {
    return get("component.inlineBindingSuffix", getInlineBindingSuffixDefault());
  }

  public void setWellFormedTemplateRequiredDefault(boolean wellFormedTemplateRequiredDefault) {
    _wellFormedTemplateRequiredDefault = wellFormedTemplateRequiredDefault;
  }

  public boolean getWellFormedTemplateRequiredDefault() {
    ensureDefaultsInitialized();
    return _wellFormedTemplateRequiredDefault;
  }

  public void setWellFormedTemplateRequired(Boolean wellFormedTemplateRequired) {
    if (wellFormedTemplateRequired == null) {
      remove("component.wellFormedTemplateRequired");
    }
    else {
      put("component.wellFormedTemplateRequired", wellFormedTemplateRequired.booleanValue());
    }
  }

  public boolean isWellFormedTemplateRequired() {
    boolean wellFormedTemplateRequired = getBoolean("component.wellFormedTemplateRequired", getWellFormedTemplateRequiredDefault());
    return wellFormedTemplateRequired;
  }

  public boolean isBuildFolderRequired() {
    return getWOVersion().isAtLeastVersion(5, 6);
  }
}
TOP

Related Classes of org.objectstyle.wolips.variables.BuildProperties

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.