package bndtools.editor;
import java.util.EnumSet;
import java.util.Set;
import java.util.StringTokenizer;
import org.bndtools.api.ILogger;
import org.bndtools.api.Logger;
import org.bndtools.core.ui.ExtendedFormEditor;
import org.bndtools.core.ui.IFormPageFactory;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.ui.forms.editor.IFormPage;
import aQute.bnd.build.model.BndEditModel;
public class DelayedPageFactory implements IFormPageFactory {
private static final ILogger logger = Logger.getLogger(DelayedPageFactory.class);
private final IConfigurationElement configElem;
private final Set<Mode> modes = EnumSet.noneOf(Mode.class);
public DelayedPageFactory(IConfigurationElement configElem) {
this.configElem = configElem;
String modeListStr = configElem.getAttribute("mode");
if (modeListStr != null) {
StringTokenizer tokenizer = new StringTokenizer(modeListStr, ",");
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken().trim();
try {
Mode mode = Enum.valueOf(Mode.class, token);
if (mode != null)
modes.add(mode);
} catch (Exception e) {
logger.logError("Invalid editor page mode: " + token, e);
}
}
}
}
public IFormPage createPage(ExtendedFormEditor editor, BndEditModel model, String id) throws IllegalArgumentException {
try {
IFormPageFactory factory = (IFormPageFactory) configElem.createExecutableExtension("class");
return factory.createPage(editor, model, id);
} catch (CoreException e) {
logger.logError("Unable to create extension form page", e);
throw new IllegalArgumentException("Error loading extension form page", e);
}
}
public boolean supportsMode(Mode mode) {
return modes.contains(mode);
}
}