Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/EclipseIniTaskImpl.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/EclipseIniTaskImpl.java374
1 files changed, 374 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/EclipseIniTaskImpl.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/EclipseIniTaskImpl.java
new file mode 100644
index 0000000000..4d36f17566
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/EclipseIniTaskImpl.java
@@ -0,0 +1,374 @@
+/**
+ */
+package org.eclipse.emf.cdo.releng.setup.impl;
+
+import org.eclipse.emf.cdo.releng.setup.EclipseIniTask;
+import org.eclipse.emf.cdo.releng.setup.SetupPackage;
+import org.eclipse.emf.cdo.releng.setup.SetupTaskContext;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Eclipse Ini Task</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.releng.setup.impl.EclipseIniTaskImpl#getOption <em>Option</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.releng.setup.impl.EclipseIniTaskImpl#getValue <em>Value</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.releng.setup.impl.EclipseIniTaskImpl#isVm <em>Vm</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EclipseIniTaskImpl extends SetupTaskImpl implements EclipseIniTask
+{
+ /**
+ * The default value of the '{@link #getOption() <em>Option</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getOption()
+ * @generated
+ * @ordered
+ */
+ protected static final String OPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getOption() <em>Option</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getOption()
+ * @generated
+ * @ordered
+ */
+ protected String option = OPTION_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected static final String VALUE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected String value = VALUE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #isVm() <em>Vm</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isVm()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean VM_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isVm() <em>Vm</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isVm()
+ * @generated
+ * @ordered
+ */
+ protected boolean vm = VM_EDEFAULT;
+
+ private transient File file;
+
+ private transient List<String> contents;
+
+ private transient String expandedValue;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EclipseIniTaskImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return SetupPackage.Literals.ECLIPSE_INI_TASK;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getOption()
+ {
+ return option;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setOption(String newOption)
+ {
+ String oldOption = option;
+ option = newOption;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, SetupPackage.ECLIPSE_INI_TASK__OPTION, oldOption, option));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getValue()
+ {
+ return value;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setValue(String newValue)
+ {
+ String oldValue = value;
+ value = newValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, SetupPackage.ECLIPSE_INI_TASK__VALUE, oldValue, value));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isVm()
+ {
+ return vm;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setVm(boolean newVm)
+ {
+ boolean oldVm = vm;
+ vm = newVm;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, SetupPackage.ECLIPSE_INI_TASK__VM, oldVm, vm));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case SetupPackage.ECLIPSE_INI_TASK__OPTION:
+ return getOption();
+ case SetupPackage.ECLIPSE_INI_TASK__VALUE:
+ return getValue();
+ case SetupPackage.ECLIPSE_INI_TASK__VM:
+ return isVm();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case SetupPackage.ECLIPSE_INI_TASK__OPTION:
+ setOption((String)newValue);
+ return;
+ case SetupPackage.ECLIPSE_INI_TASK__VALUE:
+ setValue((String)newValue);
+ return;
+ case SetupPackage.ECLIPSE_INI_TASK__VM:
+ setVm((Boolean)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case SetupPackage.ECLIPSE_INI_TASK__OPTION:
+ setOption(OPTION_EDEFAULT);
+ return;
+ case SetupPackage.ECLIPSE_INI_TASK__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ case SetupPackage.ECLIPSE_INI_TASK__VM:
+ setVm(VM_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case SetupPackage.ECLIPSE_INI_TASK__OPTION:
+ return OPTION_EDEFAULT == null ? option != null : !OPTION_EDEFAULT.equals(option);
+ case SetupPackage.ECLIPSE_INI_TASK__VALUE:
+ return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+ case SetupPackage.ECLIPSE_INI_TASK__VM:
+ return vm != VM_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString()
+ {
+ if (eIsProxy())
+ return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (option: ");
+ result.append(option);
+ result.append(", value: ");
+ result.append(value);
+ result.append(", vm: ");
+ result.append(vm);
+ result.append(')');
+ return result.toString();
+ }
+
+ public String getLabel(String value)
+ {
+ return getOption() + (value == null ? "" : (isVm() ? "" : " ") + value);
+ }
+
+ public boolean isNeeded(SetupTaskContext context) throws Exception
+ {
+ file = new File(context.getEclipseDir(), context.getOS().getEclipseIni());
+ boolean result = !file.exists() || createNewContent(context);
+ // Ensure that the perform recomputes the contents because they could be modified by other tasks between now and
+ // when doPeform is called.
+ contents = null;
+ return result;
+ }
+
+ private boolean createNewContent(SetupTaskContext context)
+ {
+ List<String> oldContents = context.getOS().readText(file);
+ contents = new ArrayList<String>(oldContents);
+ int vmargsIndex = contents.indexOf("-vmargs");
+
+ String option = getOption();
+ expandedValue = context.expandString(getValue());
+
+ if (isVm())
+ {
+ String line = option + expandedValue;
+ if (vmargsIndex != -1)
+ {
+ for (int i = vmargsIndex + 1; i < contents.size(); i++)
+ {
+ String oldLine = contents.get(i);
+ if (oldLine.startsWith(option))
+ {
+ contents.set(i, line);
+ line = null;
+ break;
+ }
+ }
+ }
+ else
+ {
+ contents.add("-vmargs");
+ }
+
+ if (line != null)
+ {
+ contents.add(line);
+ }
+ }
+ else
+ {
+ int optionIndex = contents.indexOf(option);
+ if (optionIndex != -1)
+ {
+ contents.set(optionIndex + 1, expandedValue);
+ }
+ else
+ {
+ optionIndex = vmargsIndex != -1 ? vmargsIndex : contents.size();
+ contents.add(optionIndex, option);
+ contents.add(optionIndex + 1, expandedValue);
+ }
+ }
+
+ return !contents.equals(oldContents);
+ }
+
+ public void perform(SetupTaskContext context) throws Exception
+ {
+ if (contents != null || createNewContent(context))
+ {
+ context.log("Changing " + file + " (" + getLabel(expandedValue) + ")");
+ context.getOS().writeText(file, contents);
+ }
+ }
+} // EclipseIniTaskImpl

Back to the top