/******************************************************************************* * Copyright (c) 2011, 2016 Red Hat Inc. * 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: * Red Hat Inc. - initial API and implementation * Red Hat Inc. - add support for specifying multiple flag names at once *******************************************************************************/ package org.eclipse.cdt.internal.autotools.core.configure; import java.util.ArrayList; import java.util.List; public class FlagConfigureOption extends AbstractConfigurationOption { private String value; private ArrayList<String> children = new ArrayList<>(); public FlagConfigureOption(String name, AutotoolsConfiguration cfg) { super(name, cfg); this.value = name; } public FlagConfigureOption(String name, String msgName, AutotoolsConfiguration cfg) { super(name, msgName, cfg); this.value = name; } private FlagConfigureOption(String name, AutotoolsConfiguration cfg, String value, ArrayList<String> children) { super(name, cfg); this.value = value; this.children = new ArrayList<>(children); } @Override public String getParameter() { StringBuilder parms = new StringBuilder(); // Multiple flags are designated by putting multiple flags together using "|" as delimiter String[] flagNames = getValue().split("\\|"); //$NON-NLS-1$ String flagSeparator = ""; for (String flagName : flagNames) { parms.append(flagSeparator); flagSeparator = " "; //$NON-NLS-1$ StringBuilder parm = new StringBuilder(flagName).append("=\""); //$NON-NLS-1$ boolean haveParm = false; if (isParmSet()) { String separator = ""; //$NON-NLS-1$ for (int i = 0; i < children.size(); ++i) { String fvname = children.get(i); IConfigureOption o = cfg.getOption(fvname); if (o.isParmSet()) { if (o instanceof IFlagConfigureValueOption) { parm.append(separator).append(((IFlagConfigureValueOption)o).getFlags()); separator = " "; //$NON-NLS-1$ haveParm = true; } } } if (haveParm) { parm.append('"'); parms.append(parm); } } } return parms.toString(); } @Override public String getParameterName() { return getName(); } @Override public boolean isParmSet() { for (int i = 0; i < children.size(); ++i) { String s = children.get(i); IConfigureOption o = cfg.getOption(s); if (o.isParmSet()) return true; } return false; } @Override public void setValue(String value) { this.value = value; } @Override public IConfigureOption copy(AutotoolsConfiguration config) { return new FlagConfigureOption(name, config, value, children); } @Override public String getValue() { return value; } @Override public int getType() { return FLAG; } @Override public boolean isFlag() { return true; } public void addChild(String name) { children.add(name); } public List<String> getChildren() { return children; } }