use of net.sourceforge.usbdm.packageParser.ProjectActionList in project usbdm-eclipse-plugins by podonoghue.
the class ProcessProjectActions method process.
public static void process(final Wizard wizard, final IProject projectHandle, final Device device, final ProjectActionList actionList, final Map<String, String> variableMap, final IProgressMonitor monitor) throws Exception {
// System.err.println("ProcessProjectActions.process("+device.getName()+") =============================================");
if (actionList == null) {
return;
}
final ApplyOptions applyOptions = new ApplyOptions(projectHandle);
class MyVisitor implements ProjectActionList.Visitor {
@Override
public Result applyTo(ProjectAction action, Value result, IProgressMonitor monitor) {
// System.err.println("ProjectCustomAction: "+action.toString());
try {
if (action instanceof FileAction) {
new AddTargetFiles().process(projectHandle, variableMap, (FileAction) action, monitor);
} else if (action instanceof DeleteResourceAction) {
new DeleteResource().process(projectHandle, variableMap, (DeleteResourceAction) action, monitor);
} else if (action instanceof CreateFolderAction) {
ProjectUtilities.createFolder(projectHandle, variableMap, (CreateFolderAction) action, monitor);
} else if (action instanceof ProjectOption) {
applyOptions.process(variableMap, (ProjectOption) action, monitor);
} else if (action instanceof ExcludeAction) {
ProjectUtilities.excludeItem(projectHandle, (ExcludeAction) action, monitor);
} else if (action instanceof ProjectActionList) {
ProjectActionList projectActionList = (ProjectActionList) action;
return new Result(projectActionList.appliesTo(device, variableMap) ? Status.CONTINUE : Status.PRUNE);
} else if (action instanceof ProjectCustomAction) {
ProjectCustomAction customAction = (ProjectCustomAction) action;
Class<?> actionClass = Class.forName(customAction.getclassName());
Object clsInstance = actionClass.newInstance();
if (!(clsInstance instanceof CustomAction)) {
throw new Exception("Custom action does not implement required interface");
}
((CustomAction) clsInstance).action(projectHandle, variableMap, monitor, customAction.getValue());
} else if (action instanceof ProjectConstant) {
// Ignore as already added to paramMap
} else if (action instanceof WizardGroup) {
// Ignore as already added to paramMap
} else if (action instanceof ProjectVariable) {
// Ignore as already added to paramMap
} else if (action instanceof WizardPageInformation) {
// Ignore as only applicable to wizard dialogues
} else {
throw new Exception("Unexpected action class: " + action.getClass());
}
} catch (Exception e) {
// e.printStackTrace();
StringBuffer sb = new StringBuffer();
sb.append("Unable to process Action " + action.toString() + "\n");
sb.append("Action id = " + action.getId() + "\n");
sb.append("Action owned by = " + action.getOwnerId() + "\n");
sb.append(e.getMessage());
return new Result(new Exception(sb.toString()));
}
return new Result(Status.CONTINUE);
}
}
;
MyVisitor visitor = new MyVisitor();
Result res = actionList.visit(visitor, null, monitor);
if (res.getStatus() == Status.EXCEPTION) {
throw res.getException();
}
}
use of net.sourceforge.usbdm.packageParser.ProjectActionList in project usbdm-eclipse-plugins by podonoghue.
the class ParseMenuXML method parseControlItem.
/**
* Parse element: <ul>
* <li> <fragment> referencing only elements below
* <li> <validate>
* <li> <template>
* <li> <projectActionList>
*</ul>
*
* Items found are recorded
*
* @param menuElement Menu element to parse
*
* @throws Exception
*/
private void parseControlItem(Element element) throws Exception {
String tagName = element.getTagName();
if (tagName == "fragment") {
for (Node node = element.getFirstChild(); node != null; node = node.getNextSibling()) {
if (node.getNodeType() != Node.ELEMENT_NODE) {
continue;
}
parseControlItem((Element) node);
}
} else if (tagName == "validate") {
fValidators.add(parseValidate(element));
} else if (tagName == "template") {
/**
* namespace:
* class - Template is available in
*/
String name = element.getAttribute("name");
String namespace = element.getAttribute("namespace");
if (namespace.isEmpty()) {
throw new Exception("Template is missing namespace, name='" + name + "'");
}
if (!name.isEmpty() && !namespace.equals("all")) {
throw new Exception("Named templates must have 'all' namespace, name='" + name + "'");
}
int dimension = getIntAttribute(element, "dim");
addTemplate(name, namespace, dimension, element.getTextContent().replaceAll("^\n\\s*", "").replaceAll("(\\\\n|\\n)\\s*", "\n").replaceAll("\\\\t", " "));
// System.err.println(fTemplate.toString().substring(0, 40)+"\n");
} else if (tagName == "projectActionList") {
ProjectActionList pal = PackageParser.parseRestrictedProjectActionList(element, RESOURCE_PATH);
pal.visit(new Visitor() {
@Override
public Result applyTo(ProjectAction action, Value result, IProgressMonitor monitor) {
if (action instanceof ProjectConstant) {
ProjectConstant constant = (ProjectConstant) action;
Variable var = new StringVariable(constant.getId(), constant.getId());
var.setValue(constant.getValue());
System.err.println("Adding " + var);
fProvider.addVariable(var);
}
return Visitor.CONTINUE;
}
}, null);
fProjectActionList.addProjectAction(pal);
} else {
throw new Exception("Unexpected field in parseControlItem(), value = \'" + tagName + "\'");
}
}
use of net.sourceforge.usbdm.packageParser.ProjectActionList in project usbdm-eclipse-plugins by podonoghue.
the class UsbdmNewProjectWizard method updateMapConstants.
/**
* Visits the nodes of the projectActionList and add constants found
*
* @param paramMap Map to add constants to
* @param projectActionList Action list to visit
*/
void updateMapConstants(final Map<String, String> paramMap, ProjectActionList projectActionList) {
Visitor visitor = new Visitor() {
@Override
public Result applyTo(ProjectAction action, Value result, IProgressMonitor monitor) {
try {
if (action instanceof ProjectActionList) {
ProjectActionList projectActionList = (ProjectActionList) action;
return projectActionList.appliesTo(fUsbdmProjectParametersPage_2.getDevice(), paramMap) ? CONTINUE : PRUNE;
} else if (action instanceof ProjectConstant) {
ProjectConstant projectConstant = (ProjectConstant) action;
// System.err.println(String.format("updateMapConstants(): Found constant %s => %s", projectConstant.getId(), projectConstant.getValue()));
String value = paramMap.get(projectConstant.getId());
if (value != null) {
if (projectConstant.isWeak()) {
// Ignore - assume constant is a default that has been overwritten
return CONTINUE;
}
if (!projectConstant.doOverwrite() && !value.equals(projectConstant.getValue())) {
return new Result(new Exception("paramMap already contains constant " + projectConstant.getId()));
}
}
paramMap.put(projectConstant.getId(), projectConstant.getValue());
}
return CONTINUE;
} catch (Exception e) {
return new Result(e);
}
}
};
// Visit all enabled actions and collect constants
Result result = fProjectActionList.visit(visitor, null);
if (result.getStatus() == Status.EXCEPTION) {
result.getException().printStackTrace();
}
}
use of net.sourceforge.usbdm.packageParser.ProjectActionList in project usbdm-eclipse-plugins by podonoghue.
the class KSDKLibraryImportWizard method run.
@Override
public void run(IProgressMonitor progressMonitor) throws InvocationTargetException, InterruptedException {
System.err.println("KSDKLibraryImportWizard.run()");
SubMonitor monitor = SubMonitor.convert(progressMonitor);
monitor.beginTask("Importing KDS Library", 100);
Map<String, String> paramMap = new HashMap<String, String>();
try {
kdsLibraryImportWizardPage.getPageData(paramMap);
Device device = getDevice(paramMap.get(UsbdmConstants.TARGET_DEVICE_KEY));
if (device == null) {
throw new Exception("Failed to obtain device description for " + paramMap.get(UsbdmConstants.TARGET_DEVICE_KEY));
}
// Add device options
ProjectActionList deviceActionList = device.getProjectActionList(paramMap);
// UsbdmOptionsPanel.getPageData(paramMap, deviceActionLists);
listParamMap("KSDKLibraryImportWizard.run() - paramMap =================================", paramMap);
// Create project
System.err.println("KSDKLibraryImportWizard.run() - Creating project");
IProject project = new CDTProjectManager().createUSBDMProject(paramMap, monitor.newChild(30));
// Apply default device project options
System.err.println("KSDKLibraryImportWizard.run() - Applying deviceActionLists");
ProcessProjectActions.process(this, project, device, deviceActionList, paramMap, monitor.newChild(30));
// Apply Library options
System.err.println("KSDKLibraryImportWizard.run() - Getting libraryActionList");
ProjectActionList libraryActionList = kdsLibraryImportWizardPage.getProjectActionList();
System.err.println("KSDKLibraryImportWizard.run() - Applying libraryActionList");
ProcessProjectActions.process(this, project, device, libraryActionList, paramMap, monitor.newChild(30));
updateConfigurations(project, monitor.newChild(10));
} catch (Exception e) {
e.printStackTrace();
throw new InvocationTargetException(e);
} finally {
monitor.done();
}
}
use of net.sourceforge.usbdm.packageParser.ProjectActionList in project usbdm-eclipse-plugins by podonoghue.
the class UsbdmDynamicOptionPage_N method main.
// @Override
// public boolean canFlipToNextPage() {
// return isPageComplete();
// }
/**
* Test main
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Packages Available");
shell.setLayout(new FillLayout());
Composite composite = new Composite(shell, SWT.NONE);
composite.setLayout(new FillLayout());
String deviceName = "FRDM_K22F";
// String deviceName = "FRDM_KL27Z";
// String deviceName = "MKL27Z64M4";
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("linkerFlashSize", "0x100");
paramMap.put("linkerRamSize", "0x100");
paramMap.put("outputType", "xxxxxProjectType.exe");
paramMap.put("targetDevice", deviceName);
// UsbdmDynamicOptionPage_N page = new UsbdmDynamicOptionPage_N(deviceName, paramMap, "usbdm-project-options-page");
// UsbdmDynamicOptionPage_N page = new UsbdmDynamicOptionPage_N(deviceName, paramMap, "kinetis-CPP-abstraction-options-page");
WizardPageInformation wizardPageInfo = new WizardPageInformation("kinetis-sdk-options-page", "Kinetis", "Kinetis description");
DeviceDatabase deviceDatabase = new DeviceDatabase(TargetType.T_ARM);
Device device = deviceDatabase.getDevice(deviceName);
ProjectActionList projectActionList = device.getProjectActionList(paramMap);
UsbdmDynamicOptionPage_N page = new UsbdmDynamicOptionPage_N(device, projectActionList, wizardPageInfo);
page.createControl(composite);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
page.getPageData(paramMap);
display.dispose();
}
Aggregations