blob: b9ed2cb140c4dd8c723faac8cbd50cebf937c96d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2016 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.core.feature;
import java.io.PrintWriter;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.pde.core.IWritable;
import org.eclipse.pde.internal.core.PDECore;
import org.eclipse.pde.internal.core.ifeature.IFeature;
import org.eclipse.pde.internal.core.ifeature.IFeatureChild;
import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
import org.w3c.dom.Node;
public class FeatureChild extends IdentifiableObject implements IFeatureChild {
private static final long serialVersionUID = 1L;
private String fVersion;
private String fName;
private boolean fOptional;
private int fSearchLocation = ROOT;
private String fOs;
private String fWs;
private String fArch;
private String fNl;
private String fFilter;
@Override
protected void reset() {
super.reset();
fVersion = null;
fOptional = false;
fName = null;
fSearchLocation = ROOT;
fOs = null;
fWs = null;
fArch = null;
fNl = null;
fFilter = null;
}
@Override
protected void parse(Node node) {
super.parse(node);
fVersion = getNodeAttribute(node, "version"); //$NON-NLS-1$
fName = getNodeAttribute(node, "name"); //$NON-NLS-1$
fOptional = getBooleanAttribute(node, "optional"); //$NON-NLS-1$
fOs = getNodeAttribute(node, "os"); //$NON-NLS-1$
fWs = getNodeAttribute(node, "ws"); //$NON-NLS-1$
fArch = getNodeAttribute(node, "arch"); //$NON-NLS-1$
fNl = getNodeAttribute(node, "nl"); //$NON-NLS-1$
fFilter = getNodeAttribute(node, "filter"); //$NON-NLS-1$
String searchLocationName = getNodeAttribute(node, "search_location"); //$NON-NLS-1$
if (searchLocationName == null) {
searchLocationName = getNodeAttribute(node, "search-location"); //$NON-NLS-1$
}
if (searchLocationName != null) {
switch (searchLocationName) {
case "root": //$NON-NLS-1$
fSearchLocation = ROOT;
break;
case "self": //$NON-NLS-1$
fSearchLocation = SELF;
break;
case "both": //$NON-NLS-1$
fSearchLocation = BOTH;
break;
default:
break;
}
}
//hookWithWorkspace();
}
public void loadFrom(IFeature feature) {
id = feature.getId();
fVersion = feature.getVersion();
fOptional = false;
fName = null;
}
/**
* @see IFeatureChild#getVersion()
*/
@Override
public String getVersion() {
return fVersion;
}
@Override
public boolean isOptional() {
return fOptional;
}
@Override
public String getName() {
return fName;
}
@Override
public int getSearchLocation() {
return fSearchLocation;
}
@Override
public String getOS() {
return fOs;
}
@Override
public String getWS() {
return fWs;
}
@Override
public String getArch() {
return fArch;
}
@Override
public String getNL() {
return fNl;
}
@Override
public String getFilter() {
return fFilter;
}
public IFeature getReferencedFeature() {
IFeatureModel workspaceModel = PDECore.getDefault().getFeatureModelManager().findFeatureModel(getId(), fVersion);
if (workspaceModel != null) {
return workspaceModel.getFeature();
}
return null;
}
/**
* @see IFeatureChild#setVersion(String)
*/
@Override
public void setVersion(String version) throws CoreException {
ensureModelEditable();
Object oldValue = this.fVersion;
this.fVersion = version;
firePropertyChanged(P_VERSION, oldValue, version);
}
@Override
public void setName(String name) throws CoreException {
ensureModelEditable();
Object oldValue = this.fName;
this.fName = name;
firePropertyChanged(P_NAME, oldValue, name);
}
@Override
public void setSearchLocation(int searchLocation) throws CoreException {
ensureModelEditable();
Integer oldValue = Integer.valueOf(this.fSearchLocation);
this.fSearchLocation = searchLocation;
firePropertyChanged(P_SEARCH_LOCATION, oldValue, Integer.valueOf(searchLocation));
}
@Override
public void setOptional(boolean optional) throws CoreException {
ensureModelEditable();
Object oldValue = Boolean.valueOf(this.fOptional);
this.fOptional = optional;
firePropertyChanged(P_NAME, oldValue, Boolean.valueOf(optional));
}
@Override
public void setOS(String os) throws CoreException {
ensureModelEditable();
Object oldValue = this.fOs;
this.fOs = os;
firePropertyChanged(P_OS, oldValue, os);
}
@Override
public void setWS(String ws) throws CoreException {
ensureModelEditable();
Object oldValue = this.fWs;
this.fWs = ws;
firePropertyChanged(P_WS, oldValue, ws);
}
@Override
public void setArch(String arch) throws CoreException {
ensureModelEditable();
Object oldValue = this.fArch;
this.fArch = arch;
firePropertyChanged(P_ARCH, oldValue, arch);
}
@Override
public void setNL(String nl) throws CoreException {
ensureModelEditable();
Object oldValue = this.fNl;
this.fNl = nl;
firePropertyChanged(P_NL, oldValue, nl);
}
@Override
public void setFilter(String filter) throws CoreException {
ensureModelEditable();
Object oldValue = this.fFilter;
this.fFilter = filter;
firePropertyChanged(P_FILTER, oldValue, filter);
}
@Override
public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
switch (name) {
case P_VERSION:
setVersion((String) newValue);
break;
case P_OPTIONAL:
setOptional(((Boolean) newValue).booleanValue());
break;
case P_NAME:
setName((String) newValue);
break;
case P_OS:
setOS((String) newValue);
break;
case P_WS:
setWS((String) newValue);
break;
case P_ARCH:
setArch((String) newValue);
break;
case P_NL:
setNL((String) newValue);
break;
case P_SEARCH_LOCATION:
setSearchLocation(newValue != null ? ((Integer) newValue).intValue() : ROOT);
break;
default:
super.restoreProperty(name, oldValue, newValue);
break;
}
}
@Override
public void setId(String id) throws CoreException {
super.setId(id);
}
/**
* @see IWritable#write(String, PrintWriter)
*/
@Override
public void write(String indent, PrintWriter writer) {
writer.print(indent + "<includes"); //$NON-NLS-1$
String indent2 = indent + Feature.INDENT + Feature.INDENT;
if (getId() != null) {
writer.println();
writer.print(indent2 + "id=\"" + getId() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
}
if (getVersion() != null) {
writer.println();
writer.print(indent2 + "version=\"" + getVersion() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
}
if (getName() != null) {
writer.println();
writer.print(indent2 + "name=\"" + getName() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
}
if (isOptional()) {
writer.println();
writer.print(indent2 + "optional=\"true\""); //$NON-NLS-1$
}
if (getOS() != null) {
writer.println();
writer.print(indent2 + "os=\"" + getOS() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
}
if (getWS() != null) {
writer.println();
writer.print(indent2 + "ws=\"" + getWS() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
}
if (getArch() != null) {
writer.println();
writer.print(indent2 + "arch=\"" + getArch() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
}
if (getNL() != null) {
writer.println();
writer.print(indent2 + "nl=\"" + getNL() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
}
if (fSearchLocation != ROOT) {
writer.println();
String value = fSearchLocation == SELF ? "self" : "both"; //$NON-NLS-1$ //$NON-NLS-2$
writer.print(indent2 + "search-location=\"" + value + "\""); //$NON-NLS-1$ //$NON-NLS-2$
}
if (getFilter() != null) {
writer.println();
writer.print(indent2 + "filter=\"" + getFilter() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
}
writer.println("/>"); //$NON-NLS-1$
}
}