blob: 8e566a2afccae3179ac5b9b52f539c94aa8921b2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2009 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.swt.tools.internal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
public abstract class AbstractItem implements JNIItem {
HashMap params;
static String[] split(String str, String separator) {
return JNIGenerator.split(str, separator);
}
void checkParams() {
if (params != null) return;
parse(getMetaData());
}
public abstract String flatten();
public String[] getFlags() {
Object flags = getParam("flags");
if (flags == null) return new String[0];
if (flags instanceof String[]) return (String[])flags;
String[] result = split((String)flags, " ");
setParam("flags", result);
return result;
}
public boolean getFlag(String flag) {
String[] flags = getFlags();
for (int i = 0; i < flags.length; i++) {
if (flags[i].equals(flag)) return true;
}
return false;
}
public abstract String getMetaData();
public Object getParam(String key) {
checkParams();
Object value = params.get(key);
return value == null ? "" : value;
}
public boolean getGenerate() {
return !getFlag(FLAG_NO_GEN);
}
public void setFlags(String[] flags) {
setParam("flags", flags);
}
public abstract void parse(String str);
public void setFlag(String flag, boolean value) {
String[] flags = getFlags();
HashSet set = new HashSet(Arrays.asList(flags));
if (value) {
set.add(flag);
} else {
set.remove(flag);
}
setFlags((String[])set.toArray(new String[set.size()]));
}
public void setGenerate(boolean value) {
setFlag(FLAG_NO_GEN, !value);
}
public abstract void setMetaData(String value);
public void setParam(String key, Object value) {
checkParams();
params.put(key, value);
setMetaData(flatten());
}
}