/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.maven.tools;
import org.eclipse.che.commons.xml.Element;
import org.eclipse.che.commons.xml.NewElement;
import static com.google.common.base.Strings.isNullOrEmpty;
import static org.eclipse.che.commons.xml.NewElement.createElement;
/**
* Describes activation for <i>/project/profiles/profile/</i>. Activations are the key of a profile. The power of a profile comes from its
* ability to modify the basic POM only under certain circumstances.
* Those circumstances are specified via an activation element.
* <p/>
* Supports next data:
* <ul>
* <li>activationByDefault</li>
* <li>os</li>
* <li>file</li>
* <li>property</li>
* <li>jdk</li>
* </ul>
*/
public class Activation {
public Element element;
private String activeByDefault;
private ActivationOS os;
private ActivationFile file;
private ActivationProperty property;
/** This will activate if the test is run under a jdk version number that matches the prefix given. */
private String jdk;
public Activation(Element element) {
this.element = element;
if (element.hasSingleChild("activeByDefault")) {
activeByDefault = element.getChildText("activeByDefault");
}
if (element.hasSingleChild("os")) {
os = new ActivationOS(element.getSingleChild("os"));
}
if (element.hasSingleChild("file")) {
file = new ActivationFile(element.getSingleChild("file"));
}
if (element.hasSingleChild("property")) {
property = new ActivationProperty(element.getSingleChild("property"));
}
if (element.hasSingleChild("jdk")) {
jdk = element.getChildText("jdk");
}
}
public String isActiveByDefault() {
return activeByDefault;
}
public Activation setActiveByDefault(String activeByDefault) {
this.activeByDefault = activeByDefault;
if (!isNew()) {
if (isNullOrEmpty(activeByDefault)) {
element.removeChild("activeByDefault");
} else if (element.hasSingleChild("activeByDefault")) {
element.getSingleChild("activeByDefault").setText(activeByDefault);
} else {
element.appendChild(createElement("activeByDefault", activeByDefault));
}
}
return this;
}
public ActivationOS getOs() {
return os;
}
public Activation setOs(ActivationOS os) {
this.os = os;
if (!isNew()) {
if (os == null) {
element.removeChild("os");
} else if (element.hasSingleChild("os")) {
element.removeChild("os");
element.appendChild(os.asXMLElement());
} else {
element.appendChild(os.asXMLElement());
}
}
return this;
}
public ActivationFile getFile() {
return file;
}
public Activation setFile(ActivationFile file) {
this.file = file;
if (!isNew()) {
if (file == null) {
element.removeChild("file");
} else if (element.hasSingleChild("file")) {
element.removeChild("file");
element.appendChild(file.asXMLElement());
} else {
element.appendChild(file.asXMLElement());
}
}
return this;
}
public ActivationProperty getProperty() {
return property;
}
public Activation setProperty(ActivationProperty property) {
this.property = property;
if (!isNew()) {
if (property == null) {
element.removeChild("property");
} else if (element.hasSingleChild("property")) {
element.removeChild("property");
element.appendChild(property.asXMLElement());
} else {
element.appendChild(property.asXMLElement());
}
}
return this;
}
public String getJdk() {
return jdk;
}
public Activation setJdk(String jdk) {
this.jdk = jdk;
if (!isNew()) {
if (isNullOrEmpty(jdk)) {
element.removeChild("jdk");
} else if (element.hasSingleChild("jdk")) {
element.getSingleChild("jdk").setText(jdk);
} else {
element.appendChild(createElement("jdk", jdk));
}
}
return this;
}
/** Removes <activation> element. */
public void remove() {
if (element != null) {
element.remove();
element = null;
}
}
private boolean isNew() {
return element == null;
}
/** Returns full <activation> element */
public NewElement asXMLElement() {
final NewElement activation = createElement("activation");
if (!isNullOrEmpty(activeByDefault)) {
activation.appendChild(createElement("activeByDefault", activeByDefault));
}
if (os != null) {
activation.appendChild(os.asXMLElement());
}
if (file != null) {
activation.appendChild(file.asXMLElement());
}
if (property != null) {
activation.appendChild(property.asXMLElement());
}
if (!isNullOrEmpty(jdk)) {
activation.appendChild(createElement("jdk", jdk));
}
return activation;
}
}