diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java b/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java index 59c1d2794ec..862f9adfa17 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java @@ -2,7 +2,7 @@ package org.eclipse.cdt.arduino.core.tests; import static org.junit.Assert.assertNotNull; -import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager; +import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoardManager; import org.junit.Test; public class BoardManagerTests { diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF b/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF index 6d1bf87fdb9..54bfa1f117b 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF @@ -17,11 +17,13 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.remote.serial.core;bundle-version="1.0.0", com.google.gson;bundle-version="2.2.4", org.apache.httpcomponents.httpclient;bundle-version="4.3.6", - org.apache.httpcomponents.httpcore;bundle-version="4.3.3" + org.apache.httpcomponents.httpcore;bundle-version="4.3.3", + org.apache.commons.compress;bundle-version="1.6.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ActivationPolicy: lazy Bundle-ClassPath: libs/freemarker-2.3.22.jar, . -Export-Package: org.eclipse.cdt.arduino.core, - org.eclipse.cdt.arduino.core.board +Export-Package: org.eclipse.cdt.arduino.core.internal;x-friends:="org.eclipse.cdt.arduino.ui", + org.eclipse.cdt.arduino.core.internal.board;x-friends:="org.eclipse.cdt.arduino.ui", + org.eclipse.cdt.arduino.core.internal.build;x-friends:="org.eclipse.cdt.arduino.ui" Bundle-Localization: plugin diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml b/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml index 92afaf2727e..a7733318764 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml @@ -109,7 +109,7 @@ + service="org.eclipse.cdt.arduino.core.internal.IArduinoRemoteConnection"> + + + + + + diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoHome.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoHome.java deleted file mode 100644 index 753477783bd..00000000000 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoHome.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 QNX Software Systems 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: - * QNX Software Systems - Initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.arduino.core; - -import java.io.File; - -import org.eclipse.core.runtime.Platform; - -public class ArduinoHome { - - public static final String preferenceName = "arduinoHome"; //$NON-NLS-1$ - private static final String qualifiedName = "org.eclipse.cdt.arduino.ui"; //$NON-NLS-1$ - - public static File getArduinoHome() { - String arduinoHome = Platform.getPreferencesService().getString(qualifiedName, preferenceName, getDefault(), - null); - if (Platform.getOS().equals(Platform.OS_MACOSX)) { - arduinoHome += "/Contents/Java"; //$NON-NLS-1$ - } - return new File(arduinoHome); - } - - public static String getDefault() { - switch (Platform.getOS()) { - case Platform.OS_MACOSX: - return "/Applications/Arduino.app"; //$NON-NLS-1$ - case Platform.OS_WIN32: - return "C:\\Program Files (x86)\\Arduino"; //$NON-NLS-1$ - default: - return ""; //$NON-NLS-1$ - } - } - -} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Board.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Board.java deleted file mode 100644 index 89831a29e12..00000000000 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Board.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.eclipse.cdt.arduino.core.board; - -public class Board { - - private String name; - - private transient String id; - private transient Platform platform; - - public String getName() { - return name; - } - - public Board setName(String name) { - this.name = name; - return this; - } - - public String getId() { - return id; - } - - public Board setId(String id) { - this.id = id; - return this; - } - - public Platform getPlatform() { - return platform; - } - - Board setOwners(Platform platform) { - this.platform = platform; - return this; - } - - public String getBuildSetting(String setting) { - String key = id + ".build." + setting; //$NON-NLS-1$ - return platform.getBoardsFile().getProperty(key); - } - - public String getPlatformId() { - return platform.getArchitecture(); - } - - public String getPackageId() { - return platform.getPackage().getName(); - } - -} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Help.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Help.java deleted file mode 100644 index d042e56a986..00000000000 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Help.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.eclipse.cdt.arduino.core.board; - -public class Help { - - private String online; - - public String getOnline() { - return online; - } - -} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Package.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Package.java deleted file mode 100644 index 3283f8c116a..00000000000 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Package.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.eclipse.cdt.arduino.core.board; - -import java.util.List; - -import org.eclipse.core.runtime.IProgressMonitor; - -public class Package { - - private String name; - private String maintainer; - private String websiteURL; - private String email; - private Help help; - private List platforms; - private List tools; - - private transient ArduinoBoardManager manager; - - void setOwners(ArduinoBoardManager manager) { - this.manager = manager; - for (Platform platform : platforms) { - platform.setOwners(this); - } - } - - ArduinoBoardManager getManager() { - return manager; - } - - public String getName() { - return name; - } - - public String getMaintainer() { - return maintainer; - } - - public String getWebsiteURL() { - return websiteURL; - } - - public String getEmail() { - return email; - } - - public Help getHelp() { - return help; - } - - public List getPlatforms() { - return platforms; - } - - public Platform getPlatform(String architecture) { - for (Platform platform : platforms) { - if (platform.getArchitecture().equals(architecture)) { - return platform; - } - } - return null; - } - - public List getTools() { - return tools; - } - - public void install(IProgressMonitor monitor) { - - } - -} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Platform.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Platform.java deleted file mode 100644 index 0129d8dd4ba..00000000000 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Platform.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.eclipse.cdt.arduino.core.board; - -import java.io.FileReader; -import java.io.IOException; -import java.io.Reader; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -public class Platform { - - private String name; - private String architecture; - private String version; - private String category; - private String url; - private String archiveName; - private String checksum; - private String size; - private List boards; - private List toolsDependencies; - - private transient Package pkg; - private transient Properties boardsFile; - - void setOwners(Package pkg) { - this.pkg = pkg; - for (Board board : boards) { - board.setOwners(this); - } - } - - public Package getPackage() { - return pkg; - } - - public String getName() { - return name; - } - - public String getArchitecture() { - return architecture; - } - - public String getVersion() { - return version; - } - - public String getCategory() { - return category; - } - - public String getUrl() { - return url; - } - - public String getArchiveName() { - return archiveName; - } - - public String getChecksum() { - return checksum; - } - - public String getSize() { - return size; - } - - public List getBoards() { - return boards; - } - - public Board getBoard(String boardId) { - for (Board board : boards) { - if (boardId.equals(board.getId())) { - return board; - } - } - return null; - } - - public List getToolsDependencies() { - return toolsDependencies; - } - - void install() throws IOException { - Path boardPath = pkg.getManager().getArduinoHome().resolve("hardware").resolve(pkg.getName()) //$NON-NLS-1$ - .resolve(architecture).resolve(version); - boardsFile = new Properties(); - try (Reader reader = new FileReader(boardPath.toFile())) { - boardsFile.load(reader); - } - - // Replace the boards with a real ones - boards = new ArrayList<>(); - for (Map.Entry entry : boardsFile.entrySet()) { - String key = (String) entry.getKey(); - String[] fragments = key.split("."); //$NON-NLS-1$ - if (fragments.length == 2 && "name".equals(fragments[1])) { //$NON-NLS-1$ - boards.add(new Board().setId(fragments[0]).setName((String) entry.getValue()).setOwners(this)); - } - } - } - - Properties getBoardsFile() { - return boardsFile; - } - -} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Tool.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Tool.java deleted file mode 100644 index 5de4a364645..00000000000 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Tool.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.eclipse.cdt.arduino.core.board; - -import java.util.List; - -public class Tool { - - private String name; - private String version; - private List systems; - - public String getName() { - return name; - } - - public String getVersion() { - return version; - } - - public List getSystems() { - return systems; - } - -} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolDependency.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolDependency.java deleted file mode 100644 index 2a3ffc41551..00000000000 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolDependency.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.eclipse.cdt.arduino.core.board; - -public class ToolDependency { - - private String packager; - private String name; - private String version; - - public String getPackager() { - return packager; - } - - public String getName() { - return name; - } - - public String getVersion() { - return version; - } - -} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolSystem.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolSystem.java deleted file mode 100644 index 018f2b29ffc..00000000000 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolSystem.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.eclipse.cdt.arduino.core.board; - -public class ToolSystem { - - private String host; - private String archiveFileName; - private String url; - private String checksum; - private String size; - - public String getHost() { - return host; - } - - public String getArchiveFileName() { - return archiveFileName; - } - - public String getUrl() { - return url; - } - - public String getChecksum() { - return checksum; - } - - public String getSize() { - return size; - } - -} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java index b373743ed32..3a7dce67018 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java @@ -10,6 +10,10 @@ *******************************************************************************/ package org.eclipse.cdt.arduino.core.internal; +import org.eclipse.cdt.arduino.core.internal.build.ArduinoBuilder; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent; +import org.eclipse.cdt.core.settings.model.ICProjectDescriptionListener; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Plugin; @@ -43,6 +47,14 @@ public class Activator extends Plugin { public void start(BundleContext bundleContext) throws Exception { plugin = this; + + // register listener for build config changes + CoreModel.getDefault().addCProjectDescriptionListener(new ICProjectDescriptionListener() { + @Override + public void handleEvent(CProjectDescriptionEvent event) { + ArduinoBuilder.handleProjectDescEvent(event); + } + }, CProjectDescriptionEvent.APPLIED); } public void stop(BundleContext bundleContext) throws Exception { diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoLaunchConsoleService.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoLaunchConsoleService.java similarity index 93% rename from toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoLaunchConsoleService.java rename to toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoLaunchConsoleService.java index 41b871d0152..e5b3014b1bc 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoLaunchConsoleService.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoLaunchConsoleService.java @@ -8,7 +8,7 @@ * Contributors: * QNX Software Systems - Initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.arduino.core; +package org.eclipse.cdt.arduino.core.internal; public interface ArduinoLaunchConsoleService { diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoPreferences.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoPreferences.java new file mode 100644 index 00000000000..a131ec1c648 --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoPreferences.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.core.internal; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.eclipse.core.runtime.Platform; + +public class ArduinoPreferences { + + public static String ARDUINO_HOME = "arduinoHome"; //$NON-NLS-1$ + + public static Path getArduinoHome() { + String pathStr = Platform.getPreferencesService().getString(Activator.getId(), ARDUINO_HOME, null, null); + return pathStr != null ? Paths.get(pathStr) : getDefaultArduinoHome(); + } + + public static Path getDefaultArduinoHome() { + return Paths.get(System.getProperty("user.home"), ".arduinocdt"); //$NON-NLS-1$ //$NON-NLS-2$ + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoProjectGenerator.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoProjectGenerator.java similarity index 94% rename from toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoProjectGenerator.java rename to toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoProjectGenerator.java index 3006ee9d596..7dc68b00535 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoProjectGenerator.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoProjectGenerator.java @@ -8,7 +8,7 @@ * Contributors: * QNX Software Systems - Initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.arduino.core; +package org.eclipse.cdt.arduino.core.internal; import java.io.File; import java.io.IOException; @@ -22,16 +22,15 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager; -import org.eclipse.cdt.arduino.core.internal.Activator; -import org.eclipse.cdt.arduino.core.internal.ArduinoProjectNature; -import org.eclipse.cdt.arduino.core.internal.Messages; +import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoardManager; +import org.eclipse.cdt.arduino.core.internal.build.ArduinoBuilder; import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo; import org.eclipse.cdt.managedbuilder.internal.core.ManagedProject; +import org.eclipse.core.resources.ICommand; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; @@ -69,6 +68,12 @@ public class ArduinoProjectGenerator { System.arraycopy(oldIds, 0, newIds, 0, oldIds.length); newIds[newIds.length - 1] = ArduinoProjectNature.ID; projDesc.setNatureIds(newIds); + + // Add Arduino Builder + ICommand command = projDesc.newCommand(); + command.setBuilderName(ArduinoBuilder.ID); + projDesc.setBuildSpec(new ICommand[] { command }); + project.setDescription(projDesc, monitor); // create the CDT natures and build setup diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/AvrLanguageSettingsProvider.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/AvrLanguageSettingsProvider.java index 7c050c1b08f..0165cdc6a31 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/AvrLanguageSettingsProvider.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/AvrLanguageSettingsProvider.java @@ -13,9 +13,8 @@ package org.eclipse.cdt.arduino.core.internal; import java.io.File; import java.util.List; -import org.eclipse.cdt.arduino.core.ArduinoHome; -import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager; -import org.eclipse.cdt.arduino.core.board.Board; +import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoardManager; +import org.eclipse.cdt.arduino.core.internal.board.Board; import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector; @@ -36,7 +35,7 @@ public class AvrLanguageSettingsProvider extends GCCBuiltinSpecsDetector { try { IConfiguration config = ManagedBuildManager.getConfigurationForDescription(currentCfgDescription); Board board = ArduinoBoardManager.instance.getBoard(config); - String mcu = board.getBuildSetting("mcu"); //$NON-NLS-1$ + String mcu = board.getProperty("build.mcu"); //$NON-NLS-1$ if (mcu != null) { opts += " -mmcu=" + mcu; //$NON-NLS-1$ } @@ -51,7 +50,8 @@ public class AvrLanguageSettingsProvider extends GCCBuiltinSpecsDetector { protected List parseOptions(String line) { if (Platform.getOS().equals(Platform.OS_WIN32)) { if (line.startsWith(" /arduino/")) { //$NON-NLS-1$ - File full = new File(ArduinoHome.getArduinoHome().getParentFile(), line.trim()); + // TODO + File full = new File(ArduinoPreferences.getArduinoHome().toFile(), line.trim()); return parseOptions(" " + full.getAbsolutePath()); //$NON-NLS-1$ } } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/EnvVarSupplier.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/EnvVarSupplier.java index 23a7dd9a026..24f8a4ffd92 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/EnvVarSupplier.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/EnvVarSupplier.java @@ -14,7 +14,6 @@ import java.io.File; import java.util.ArrayList; import java.util.List; -import org.eclipse.cdt.arduino.core.ArduinoHome; import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable; import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSupplier; @@ -63,13 +62,13 @@ public class EnvVarSupplier implements IConfigurationEnvironmentVariableSupplier public EnvVarSupplier() { arduinoHome = new EnvVar(); arduinoHome.name = "ARDUINO_HOME"; //$NON-NLS-1$ - arduinoHome.value = clean(ArduinoHome.getArduinoHome().getAbsolutePath()); + arduinoHome.value = clean(ArduinoPreferences.getArduinoHome().toString()); arduinoLibs = new EnvVar(); arduinoLibs.name = "ARDUINO_USER_LIBS"; //$NON-NLS-1$ arduinoLibs.value = clean(System.getProperty("user.home") + "/Documents/Arduino/libraries"); //$NON-NLS-1$ //$NON-NLS-2$ - String avrDir = ArduinoHome.getArduinoHome().toString() + "/hardware/tools/avr/bin"; //$NON-NLS-1$ + String avrDir = ArduinoPreferences.getArduinoHome().toString() + "/hardware/tools/avr/bin"; //$NON-NLS-1$ String installDir = Platform.getInstallLocation().getURL().getPath(); path = new EnvVar(); path.name = "PATH"; //$NON-NLS-1$ diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/HierarchicalProperties.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/HierarchicalProperties.java new file mode 100644 index 00000000000..2271ddc609a --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/HierarchicalProperties.java @@ -0,0 +1,136 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.core.internal; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +public class HierarchicalProperties { + + private String value; + private Map children; + + public HierarchicalProperties() { + } + + public HierarchicalProperties(Properties properties) { + for (Map.Entry entry : properties.entrySet()) { + String key = (String) entry.getKey(); + String value = (String) entry.getValue(); + putProperty(key, value); + } + } + + public String getProperty(String qualifiedKey) { + if (children == null) { + return null; + } + + int i = qualifiedKey.indexOf('.'); + if (i < 0) { + HierarchicalProperties child = children.get(qualifiedKey); + return child != null ? child.getValue() : null; + } else { + String key = qualifiedKey.substring(0, i); + HierarchicalProperties child = children.get(key); + if (child != null) { + String childKey = qualifiedKey.substring(i + 1); + return child.getProperty(childKey); + } else { + return null; + } + } + } + + public void putProperty(String qualifiedKey, String value) { + if (children == null) { + children = new HashMap<>(); + } + + int i = qualifiedKey.indexOf('.'); + if (i < 0) { + HierarchicalProperties child = children.get(qualifiedKey); + if (child == null) { + child = new HierarchicalProperties(); + children.put(qualifiedKey, child); + child.setValue(value); + } + } else { + String key = qualifiedKey.substring(0, i); + HierarchicalProperties child = children.get(key); + if (child == null) { + child = new HierarchicalProperties(); + children.put(qualifiedKey, child); + } + String childKey = qualifiedKey.substring(i + 1); + child.putProperty(childKey, value); + } + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public Map getChildren() { + return children; + } + + public HierarchicalProperties getChild(String key) { + return children != null ? children.get(key) : null; + } + + public void putChild(String key, HierarchicalProperties node) { + if (children == null) { + children = new HashMap<>(); + } + children.put(key, node); + } + + public List listChildren() { + int size = 0; + for (Map.Entry entry : children.entrySet()) { + try { + int i = Integer.parseInt(entry.getKey()); + if (i + 1 > size) { + size = i + 1; + } + } catch (NumberFormatException e) { + // ignore + } + } + + ArrayList list = new ArrayList<>(size); + for (Map.Entry entry : children.entrySet()) { + try { + int i = Integer.parseInt(entry.getKey()); + list.set(i, entry.getValue()); + } catch (NumberFormatException e) { + // ignore + } + } + return list; + } + + public void setChildren(List list) { + children.clear(); + for (int i = 0; i < list.size(); i++) { + HierarchicalProperties node = list.get(i); + if (node != null) { + children.put(Integer.toString(i), node); + } + } + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoRemoteConnection.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/IArduinoRemoteConnection.java similarity index 96% rename from toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoRemoteConnection.java rename to toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/IArduinoRemoteConnection.java index 535f1ed4d4e..79d1f8bd945 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoRemoteConnection.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/IArduinoRemoteConnection.java @@ -8,7 +8,7 @@ * Contributors: * QNX Software Systems - Initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.arduino.core; +package org.eclipse.cdt.arduino.core.internal; import org.eclipse.remote.core.IRemoteConnection; diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ArduinoBoardManager.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoBoardManager.java similarity index 92% rename from toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ArduinoBoardManager.java rename to toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoBoardManager.java index 3b724095a5c..97361b55b38 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ArduinoBoardManager.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoBoardManager.java @@ -8,13 +8,12 @@ * Contributors: * QNX Software Systems - Initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.arduino.core.board; +package org.eclipse.cdt.arduino.core.internal.board; import java.io.FileReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.List; @@ -25,6 +24,7 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.eclipse.cdt.arduino.core.internal.Activator; +import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences; import org.eclipse.cdt.arduino.core.internal.Messages; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription; @@ -56,9 +56,7 @@ public class ArduinoBoardManager { public static final String PACKAGE_OPTION_ID = "org.eclipse.cdt.arduino.option.package"; //$NON-NLS-1$ public static final String AVR_TOOLCHAIN_ID = "org.eclipse.cdt.arduino.toolChain.avr"; //$NON-NLS-1$ - // TODO make this a preference - private Path arduinoHome = Paths.get(System.getProperty("user.home"), ".arduinocdt"); //$NON-NLS-1$ //$NON-NLS-2$ - private Path packageIndexPath; + private Path packageIndexPath = ArduinoPreferences.getArduinoHome().resolve("package_index.json"); //$NON-NLS-1$ private PackageIndex packageIndex; public ArduinoBoardManager() { @@ -75,8 +73,7 @@ public class ArduinoBoardManager { if (entity == null) { return new Status(IStatus.ERROR, Activator.getId(), Messages.ArduinoBoardManager_1); } - Files.createDirectories(arduinoHome); - packageIndexPath = arduinoHome.resolve("package_index.json"); //$NON-NLS-1$ + Files.createDirectories(packageIndexPath.getParent()); Files.copy(entity.getContent(), packageIndexPath, StandardCopyOption.REPLACE_EXISTING); } } @@ -88,14 +85,11 @@ public class ArduinoBoardManager { }.schedule(); } - Path getArduinoHome() { - return arduinoHome; - } - public PackageIndex getPackageIndex() throws IOException { if (packageIndex == null) { try (FileReader reader = new FileReader(packageIndexPath.toFile())) { packageIndex = new Gson().fromJson(reader, PackageIndex.class); + packageIndex.setOwners(this); } } return packageIndex; @@ -124,7 +118,7 @@ public class ArduinoBoardManager { return projDesc.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data); } - public Board getBoard(String boardId, String platformId, String packageId) { + public Board getBoard(String boardId, String platformId, String packageId) throws CoreException { return packageIndex.getPackage(packageId).getPlatform(platformId).getBoard(boardId); } @@ -145,9 +139,9 @@ public class ArduinoBoardManager { } - public List getBoards() { + public List getBoards() throws CoreException { List boards = new ArrayList<>(); - for (Package pkg : packageIndex.getPackages()) { + for (BoardPackage pkg : packageIndex.getPackages()) { for (Platform platform : pkg.getPlatforms()) { boards.addAll(platform.getBoards()); } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Board.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Board.java new file mode 100644 index 00000000000..4f2afacb42c --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Board.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.core.internal.board; + +import org.eclipse.cdt.arduino.core.internal.HierarchicalProperties; + +public class Board { + + private String name; + + private String id; + + private Platform platform; + private HierarchicalProperties properties; + + public Board() { + } + + public Board(HierarchicalProperties properties) { + this.properties = properties; + this.id = this.properties.getValue(); + this.name = this.properties.getChild("name").getValue(); //$NON-NLS-1$ + } + + public String getName() { + return name; + } + + public String getId() { + return id; + } + + public Platform getPlatform() { + return platform; + } + + Board setOwners(Platform platform) { + this.platform = platform; + return this; + } + + public String getProperty(String key) { + return properties.getProperty(key); + } + + public String getPlatformId() { + return platform.getArchitecture(); + } + + public String getPackageId() { + return platform.getPackage().getName(); + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/BoardPackage.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/BoardPackage.java new file mode 100644 index 00000000000..bdcf97852fb --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/BoardPackage.java @@ -0,0 +1,144 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.core.internal.board; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.eclipse.core.runtime.IProgressMonitor; + +public class BoardPackage { + + private String name; + private String maintainer; + private String websiteURL; + private String email; + private Help help; + private List platforms; + private List tools; + + private transient ArduinoBoardManager manager; + + void setOwners(ArduinoBoardManager manager) { + this.manager = manager; + for (Platform platform : platforms) { + platform.setOwners(this); + } + } + + ArduinoBoardManager getManager() { + return manager; + } + + public String getName() { + return name; + } + + public String getMaintainer() { + return maintainer; + } + + public String getWebsiteURL() { + return websiteURL; + } + + public String getEmail() { + return email; + } + + public Help getHelp() { + return help; + } + + public Collection getPlatforms() { + return Collections.unmodifiableCollection(platforms); + } + + /** + * Only the latest versions of the platforms. + * + * @return latest platforms + */ + public Collection getLatestPlatforms() { + Map platformMap = new HashMap<>(); + for (Platform platform : platforms) { + Platform p = platformMap.get(platform.getName()); + if (p == null || compareVersions(platform.getVersion(), p.getVersion()) > 0) { + platformMap.put(platform.getName(), platform); + } + } + + return Collections.unmodifiableCollection(platformMap.values()); + } + + private int compareVersions(String version1, String version2) { + if (version1 == null) { + return version2 == null ? 0 : -1; + } + + if (version2 == null) { + return 1; + } + + String[] v1 = version1.split("\\."); //$NON-NLS-1$ + String[] v2 = version2.split("\\."); //$NON-NLS-1$ + for (int i = 0; i < Math.max(v1.length, v2.length); ++i) { + if (v1.length <= i) { + return v2.length < i ? 0 : -1; + } + + if (v2.length <= i) { + return 1; + } + + try { + int vi1 = Integer.parseInt(v1[i]); + int vi2 = Integer.parseInt(v2[i]); + if (vi1 < vi2) { + return -1; + } + + if (vi1 > vi2) { + return 1; + } + } catch (NumberFormatException e) { + // not numbers, do string compares + int c = v1[i].compareTo(v2[i]); + if (c < 0) { + return -1; + } + if (c > 0) { + return 1; + } + } + } + + return 0; + } + + public Platform getPlatform(String architecture) { + for (Platform platform : platforms) { + if (platform.getArchitecture().equals(architecture)) { + return platform; + } + } + return null; + } + + public List getTools() { + return tools; + } + + public void install(IProgressMonitor monitor) { + + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Help.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Help.java new file mode 100644 index 00000000000..eae2f225103 --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Help.java @@ -0,0 +1,18 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.core.internal.board; + +public class Help { + + private String online; + + public String getOnline() { + return online; + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/PackageIndex.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/PackageIndex.java similarity index 64% rename from toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/PackageIndex.java rename to toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/PackageIndex.java index 1997123c16d..5917412b7e6 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/PackageIndex.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/PackageIndex.java @@ -5,20 +5,20 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ -package org.eclipse.cdt.arduino.core.board; +package org.eclipse.cdt.arduino.core.internal.board; import java.util.List; public class PackageIndex { - private List packages; + private List packages; - public List getPackages() { + public List getPackages() { return packages; } - public Package getPackage(String packageName) { - for (Package pkg : packages) { + public BoardPackage getPackage(String packageName) { + for (BoardPackage pkg : packages) { if (pkg.getName().equals(packageName)) { return pkg; } @@ -26,4 +26,10 @@ public class PackageIndex { return null; } + void setOwners(ArduinoBoardManager manager) { + for (BoardPackage pkg : packages) { + pkg.setOwners(manager); + } + } + } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Platform.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Platform.java new file mode 100644 index 00000000000..885e79a2bf4 --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Platform.java @@ -0,0 +1,216 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.core.internal.board; + +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.ArchiveException; +import org.apache.commons.compress.archivers.ArchiveInputStream; +import org.apache.commons.compress.archivers.ArchiveStreamFactory; +import org.apache.commons.compress.compressors.CompressorException; +import org.apache.commons.compress.compressors.CompressorStreamFactory; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.eclipse.cdt.arduino.core.internal.Activator; +import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences; +import org.eclipse.cdt.arduino.core.internal.HierarchicalProperties; +import org.eclipse.cdt.arduino.core.internal.Messages; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; + +@SuppressWarnings("restriction") +public class Platform { + + private String name; + private String architecture; + private String version; + private String category; + private String url; + private String archiveFileName; + private String checksum; + private String size; + private List boards; + private List toolsDependencies; + + private transient BoardPackage pkg; + private transient HierarchicalProperties boardsFile; + + void setOwners(BoardPackage pkg) { + this.pkg = pkg; + for (Board board : boards) { + board.setOwners(this); + } + } + + public BoardPackage getPackage() { + return pkg; + } + + public String getName() { + return name; + } + + public String getArchitecture() { + return architecture; + } + + public String getVersion() { + return version; + } + + public String getCategory() { + return category; + } + + public String getUrl() { + return url; + } + + public String getArchiveFileName() { + return archiveFileName; + } + + public String getChecksum() { + return checksum; + } + + public String getSize() { + return size; + } + + public List getBoards() throws CoreException { + if (isInstalled() && boardsFile == null) { + Properties boardProps = new Properties(); + try (Reader reader = new FileReader(getInstallPath().resolve("boards.txt").toFile())) { //$NON-NLS-1$ + boardProps.load(reader); + } catch (IOException e) { + throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), "Loading boards", e)); + } + + boardsFile = new HierarchicalProperties(boardProps); + + // Replace the boards with a real ones + boards = new ArrayList<>(); + for (HierarchicalProperties child : boardsFile.getChildren().values()) { + if (child.getChild("name") != null) { //$NON-NLS-1$ + // assume things with names are boards + boards.add(new Board(child).setOwners(this)); + } + } + } + return boards; + } + + public Board getBoard(String boardId) throws CoreException { + for (Board board : getBoards()) { + if (boardId.equals(board.getId())) { + return board; + } + } + return null; + } + + public List getToolsDependencies() { + return toolsDependencies; + } + + public boolean isInstalled() { + return getInstallPath().resolve("boards.txt").toFile().exists(); //$NON-NLS-1$ + } + + private Path getInstallPath() { + return ArduinoPreferences.getArduinoHome().resolve("hardware").resolve(pkg.getName()).resolve(architecture) //$NON-NLS-1$ + .resolve(version); + } + + public IStatus install(IProgressMonitor monitor) throws CoreException { + try { + try (CloseableHttpClient client = HttpClients.createDefault()) { + HttpGet get = new HttpGet(url); + try (CloseableHttpResponse response = client.execute(get)) { + if (response.getStatusLine().getStatusCode() >= 400) { + return new Status(IStatus.ERROR, Activator.getId(), response.getStatusLine().getReasonPhrase()); + } else { + HttpEntity entity = response.getEntity(); + if (entity == null) { + return new Status(IStatus.ERROR, Activator.getId(), Messages.ArduinoBoardManager_1); + } + // the archive has the version number as the root + // directory + Path installPath = getInstallPath().getParent(); + Files.createDirectories(installPath); + Path archivePath = installPath.resolve(archiveFileName); + Files.copy(entity.getContent(), archivePath, StandardCopyOption.REPLACE_EXISTING); + + // extract + ArchiveInputStream archiveIn = null; + try { + String compressor = null; + String archiver = null; + if (archiveFileName.endsWith("tar.bz2")) { //$NON-NLS-1$ + compressor = CompressorStreamFactory.BZIP2; + archiver = ArchiveStreamFactory.TAR; + } else if (archiveFileName.endsWith(".tar.gz") || archiveFileName.endsWith(".tgz")) { //$NON-NLS-1$ //$NON-NLS-2$ + compressor = CompressorStreamFactory.GZIP; + archiver = ArchiveStreamFactory.TAR; + } else if (archiveFileName.endsWith(".tar.xz")) { //$NON-NLS-1$ + compressor = CompressorStreamFactory.XZ; + archiver = ArchiveStreamFactory.TAR; + } else if (archiveFileName.endsWith(".zip")) { //$NON-NLS-1$ + archiver = ArchiveStreamFactory.ZIP; + } + + InputStream in = new BufferedInputStream(new FileInputStream(archivePath.toFile())); + if (compressor != null) { + in = new CompressorStreamFactory().createCompressorInputStream(compressor, in); + } + archiveIn = new ArchiveStreamFactory().createArchiveInputStream(archiver, in); + + for (ArchiveEntry entry = archiveIn.getNextEntry(); entry != null; entry = archiveIn + .getNextEntry()) { + if (entry.isDirectory()) { + continue; + } + + // TODO check for soft links in tar files. + Path entryPath = installPath.resolve(entry.getName()); + Files.createDirectories(entryPath.getParent()); + Files.copy(archiveIn, entryPath, StandardCopyOption.REPLACE_EXISTING); + } + } finally { + if (archiveIn != null) { + archiveIn.close(); + } + } + } + } + } + return Status.OK_STATUS; + } catch (IOException | CompressorException | ArchiveException e) { + throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), "Installing Platform", e)); + } + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Tool.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Tool.java new file mode 100644 index 00000000000..b1f95b628a0 --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/Tool.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.core.internal.board; + +import java.util.List; + +public class Tool { + + private String name; + private String version; + private List systems; + + public String getName() { + return name; + } + + public String getVersion() { + return version; + } + + public List getSystems() { + return systems; + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ToolDependency.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ToolDependency.java new file mode 100644 index 00000000000..f154346fafa --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ToolDependency.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.core.internal.board; + +public class ToolDependency { + + private String packager; + private String name; + private String version; + + public String getPackager() { + return packager; + } + + public String getName() { + return name; + } + + public String getVersion() { + return version; + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ToolSystem.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ToolSystem.java new file mode 100644 index 00000000000..d7fcb407a9d --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ToolSystem.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.core.internal.board; + +public class ToolSystem { + + private String host; + private String archiveFileName; + private String url; + private String checksum; + private String size; + + public String getHost() { + return host; + } + + public String getArchiveFileName() { + return archiveFileName; + } + + public String getUrl() { + return url; + } + + public String getChecksum() { + return checksum; + } + + public String getSize() { + return size; + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuilder.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuilder.java new file mode 100644 index 00000000000..2450dac4068 --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuilder.java @@ -0,0 +1,68 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.core.internal.build; + +import java.util.Map; + +import org.eclipse.cdt.arduino.core.internal.Activator; +import org.eclipse.cdt.arduino.core.internal.ArduinoProjectNature; +import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent; +import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; +import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo; +import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.IncrementalProjectBuilder; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; + +/** + * This class is responsible for generating the Makefile for the current build + * config. + */ +public class ArduinoBuilder extends IncrementalProjectBuilder { + + public static final String ID = Activator.getId() + ".arduinoBuilder"; //$NON-NLS-1$ + + @Override + protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException { + IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(getProject()); + IConfiguration config = info.getDefaultConfiguration(); + + // TODO if there are references we want to watch, return them here + return null; + } + + public static void handleProjectDescEvent(CProjectDescriptionEvent event) { + try { + IProject project = event.getProject(); + // Is this an arduino project? + if (!ArduinoProjectNature.hasNature(project)) { + return; + } + + // See if CDT config changed and sync the Resource config + ICConfigurationDescription newConfigDesc = event.getNewCProjectDescription().getActiveConfiguration(); + ICConfigurationDescription oldConfigDesc = event.getOldCProjectDescription().getActiveConfiguration(); + if (!newConfigDesc.equals(oldConfigDesc)) { + System.out.println("Active config changed: " + newConfigDesc.getName()); //$NON-NLS-1$ + String configName = newConfigDesc.getName(); + if (project.hasBuildConfig(configName)) { + IProjectDescription projDesc = project.getDescription(); + projDesc.setActiveBuildConfig(configName); + project.setDescription(projDesc, new NullProgressMonitor()); + } + } + } catch (CoreException e) { + Activator.log(e); + } + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java index bddbdeb69d6..c45986badb4 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java @@ -15,12 +15,12 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import org.eclipse.cdt.arduino.core.ArduinoLaunchConsoleService; -import org.eclipse.cdt.arduino.core.IArduinoRemoteConnection; -import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager; -import org.eclipse.cdt.arduino.core.board.Board; import org.eclipse.cdt.arduino.core.internal.Activator; +import org.eclipse.cdt.arduino.core.internal.ArduinoLaunchConsoleService; +import org.eclipse.cdt.arduino.core.internal.IArduinoRemoteConnection; import org.eclipse.cdt.arduino.core.internal.Messages; +import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoardManager; +import org.eclipse.cdt.arduino.core.internal.board.Board; import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.envvar.IEnvironmentVariable; diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java index 502202ccb2c..61a549984a7 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java @@ -14,8 +14,8 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -import org.eclipse.cdt.arduino.core.IArduinoRemoteConnection; import org.eclipse.cdt.arduino.core.internal.Activator; +import org.eclipse.cdt.arduino.core.internal.IArduinoRemoteConnection; import org.eclipse.cdt.serial.SerialPort; import org.eclipse.remote.core.IRemoteCommandShellService; import org.eclipse.remote.core.IRemoteConnection; diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml b/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml index 5196afee4af..1965a99dd52 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml @@ -69,15 +69,21 @@ point="org.eclipse.ui.preferencePages"> + + + class="org.eclipse.cdt.arduino.ui.internal.preferences.ArduinoPreferenceInitializer"> diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Activator.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Activator.java index bf355a2e58c..4028942dfaf 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Activator.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Activator.java @@ -13,8 +13,11 @@ package org.eclipse.cdt.arduino.ui.internal; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.preferences.InstanceScope; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.eclipse.ui.preferences.ScopedPreferenceStore; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -23,6 +26,8 @@ import org.osgi.framework.ServiceReference; */ public class Activator extends AbstractUIPlugin { + private IPreferenceStore corePreferenceStore; + // The plug-in ID public static final String PLUGIN_ID = "org.eclipse.cdt.arduino.ui"; //$NON-NLS-1$ @@ -77,4 +82,11 @@ public class Activator extends AbstractUIPlugin { return ref != null ? context.getService(ref) : null; } + public IPreferenceStore getCorePreferenceStore() { + if (corePreferenceStore == null) { + corePreferenceStore = new ScopedPreferenceStore(InstanceScope.INSTANCE, "org.eclipse.cdt.qrduino.core"); //$NON-NLS-1$ + } + return corePreferenceStore; + } + } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/ArduinoPreferenceInitializer.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/ArduinoPreferenceInitializer.java deleted file mode 100644 index 01b3c123476..00000000000 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/ArduinoPreferenceInitializer.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.eclipse.cdt.arduino.ui.internal; - -import org.eclipse.cdt.arduino.core.ArduinoHome; -import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; -import org.eclipse.jface.preference.IPreferenceStore; - -public class ArduinoPreferenceInitializer extends AbstractPreferenceInitializer { - - @Override - public void initializeDefaultPreferences() { - IPreferenceStore store = Activator.getDefault().getPreferenceStore(); - store.setDefault(ArduinoHome.preferenceName, ArduinoHome.getDefault()); - } - -} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/launch/ArduinoLaunchConsole.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/launch/ArduinoLaunchConsole.java index e846157f051..85e786d29a2 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/launch/ArduinoLaunchConsole.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/launch/ArduinoLaunchConsole.java @@ -13,7 +13,7 @@ package org.eclipse.cdt.arduino.ui.internal.launch; import java.io.IOException; import java.io.InputStream; -import org.eclipse.cdt.arduino.core.ArduinoLaunchConsoleService; +import org.eclipse.cdt.arduino.core.internal.ArduinoLaunchConsoleService; import org.eclipse.cdt.arduino.ui.internal.Messages; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoBoardsPreferencePage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoBoardsPreferencePage.java new file mode 100644 index 00000000000..985474235d5 --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoBoardsPreferencePage.java @@ -0,0 +1,217 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.ui.internal.preferences; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoardManager; +import org.eclipse.cdt.arduino.core.internal.board.Board; +import org.eclipse.cdt.arduino.core.internal.board.BoardPackage; +import org.eclipse.cdt.arduino.core.internal.board.PackageIndex; +import org.eclipse.cdt.arduino.core.internal.board.Platform; +import org.eclipse.cdt.arduino.ui.internal.Activator; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.layout.TableColumnLayout; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.TableItem; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; + +public class ArduinoBoardsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { + + private Table table; + private Button installButton; + private Set toInstall = new HashSet<>(); + + @Override + public void init(IWorkbench workbench) { + setPreferenceStore(Activator.getDefault().getCorePreferenceStore()); + } + + @Override + protected Control createContents(Composite parent) { + Composite comp = new Composite(parent, SWT.NONE); + comp.setLayout(new GridLayout(2, false)); + + Composite tableComp = new Composite(comp, SWT.NONE); + tableComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + table = new Table(tableComp, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.FULL_SELECTION); + table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + table.setHeaderVisible(true); + table.setLinesVisible(true); + + TableColumn packageColumn = new TableColumn(table, SWT.LEAD); + packageColumn.setText("Board"); + + TableColumn platformColumn = new TableColumn(table, SWT.LEAD); + platformColumn.setText("Platform"); + + TableColumn installedColumn = new TableColumn(table, SWT.LEAD); + installedColumn.setText("Installed"); + + TableColumnLayout tableLayout = new TableColumnLayout(); + tableLayout.setColumnData(packageColumn, new ColumnWeightData(5, 150, true)); + tableLayout.setColumnData(platformColumn, new ColumnWeightData(5, 150, true)); + tableLayout.setColumnData(installedColumn, new ColumnWeightData(2, 75, true)); + tableComp.setLayout(tableLayout); + + table.addListener(SWT.Selection, new Listener() { + @Override + public void handleEvent(Event event) { + updateButtons(); + } + }); + + Composite buttonComp = new Composite(comp, SWT.NONE); + buttonComp.setLayout(new GridLayout()); + buttonComp.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false)); + + installButton = new Button(buttonComp, SWT.PUSH); + installButton.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false)); + installButton.setText("Install"); + installButton.addListener(SWT.Selection, new Listener() { + @Override + public void handleEvent(Event event) { + for (TableItem item : table.getSelection()) { + Board board = (Board) item.getData(); + toInstall.add(board); + item.setText(2, "selected"); + updateButtons(); + } + } + }); + + updateTable(); + updateButtons(); + + return comp; + } + + private void updateTable() { + if (table == null || table.isDisposed()) { + return; + } + + table.removeAll(); + + try { + PackageIndex packageIndex = ArduinoBoardManager.instance.getPackageIndex(); + List boards = new ArrayList<>(); + for (BoardPackage pkg : packageIndex.getPackages()) { + for (Platform platform : pkg.getLatestPlatforms()) { + try { + for (Board board : platform.getBoards()) { + boards.add(board); + } + } catch (CoreException e) { + Activator.log(e); + } + } + } + + Collections.sort(boards, new Comparator() { + public int compare(Board o1, Board o2) { + return o1.getName().compareTo(o2.getName()); + } + }); + + for (Board board : boards) { + TableItem item = new TableItem(table, SWT.NONE); + item.setData(board); + item.setText(0, board.getName()); + item.setText(1, board.getPlatform().getName()); + String msg; + if (toInstall.contains(board)) { + msg = "selected"; + } else { + msg = board.getPlatform().isInstalled() ? "yes" : "no"; + } + item.setText(2, msg); + } + } catch (IOException e) { + Activator.log(e); + } + } + + private void updateButtons() { + if (table == null || table.isDisposed()) { + return; + } + + boolean enable = false; + for (TableItem item : table.getSelection()) { + Board board = (Board) item.getData(); + if (toInstall.contains(board)) { + continue; + } + Platform platform = board.getPlatform(); + if (!platform.isInstalled()) { + enable = true; + } + } + installButton.setEnabled(enable); + } + + @Override + public boolean performOk() { + new Job("Installing Arduino Board Platforms") { + @Override + protected IStatus run(IProgressMonitor monitor) { + Set platforms = new HashSet<>(); + for (Board board : toInstall) { + platforms.add(board.getPlatform()); + } + + for (Platform platform : platforms) { + try { + platform.install(monitor); + } catch (CoreException e) { + return e.getStatus(); + } + } + + toInstall.clear(); + + if (table != null && !table.isDisposed()) { + table.getDisplay().asyncExec(new Runnable() { + @Override + public void run() { + updateTable(); + } + }); + } + + return Status.OK_STATUS; + } + }.schedule(); + return true; + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferenceInitializer.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferenceInitializer.java new file mode 100644 index 00000000000..914192a7048 --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferenceInitializer.java @@ -0,0 +1,23 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.ui.internal.preferences; + +import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences; +import org.eclipse.cdt.arduino.ui.internal.Activator; +import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; +import org.eclipse.jface.preference.IPreferenceStore; + +public class ArduinoPreferenceInitializer extends AbstractPreferenceInitializer { + + @Override + public void initializeDefaultPreferences() { + IPreferenceStore store = Activator.getDefault().getCorePreferenceStore(); + store.setDefault(ArduinoPreferences.ARDUINO_HOME, ArduinoPreferences.getDefaultArduinoHome().toString()); + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/ArduinoPreferencePage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferencePage.java similarity index 63% rename from toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/ArduinoPreferencePage.java rename to toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferencePage.java index f66c82fe5e5..ef64075dc22 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/ArduinoPreferencePage.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferencePage.java @@ -8,11 +8,14 @@ * Contributors: * QNX Software Systems - Initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.arduino.ui.internal; +package org.eclipse.cdt.arduino.ui.internal.preferences; -import org.eclipse.cdt.arduino.core.ArduinoHome; +import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences; +import org.eclipse.cdt.arduino.ui.internal.Activator; +import org.eclipse.cdt.arduino.ui.internal.Messages; import org.eclipse.jface.preference.DirectoryFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; @@ -22,16 +25,23 @@ public class ArduinoPreferencePage extends FieldEditorPreferencePage implements super(GRID); } + @Override + public IPreferenceStore getPreferenceStore() { + // TODO Auto-generated method stub + return super.getPreferenceStore(); + } + @Override protected void createFieldEditors() { - addField(new DirectoryFieldEditor(ArduinoHome.preferenceName, Messages.ArduinoPreferencePage_0, + addField(new DirectoryFieldEditor(ArduinoPreferences.ARDUINO_HOME, Messages.ArduinoPreferencePage_0, getFieldEditorParent())); } @Override public void init(IWorkbench workbench) { setDescription(Messages.ArduinoPreferencePage_1); - setPreferenceStore(Activator.getDefault().getPreferenceStore()); + // Preferences are stored in core + setPreferenceStore(Activator.getDefault().getCorePreferenceStore()); } } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/project/NewArduinoProjectWizard.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/project/NewArduinoProjectWizard.java index 141899b703b..8e8bcd1680d 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/project/NewArduinoProjectWizard.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/project/NewArduinoProjectWizard.java @@ -1,6 +1,6 @@ package org.eclipse.cdt.arduino.ui.internal.project; -import org.eclipse.cdt.arduino.core.ArduinoProjectGenerator; +import org.eclipse.cdt.arduino.core.internal.ArduinoProjectGenerator; import org.eclipse.cdt.arduino.ui.internal.Activator; import org.eclipse.cdt.arduino.ui.internal.Messages; import org.eclipse.core.runtime.CoreException; diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java index e1452a224cb..870c47d7834 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java @@ -3,12 +3,13 @@ package org.eclipse.cdt.arduino.ui.internal.remote; import java.io.IOException; import java.util.Collection; -import org.eclipse.cdt.arduino.core.IArduinoRemoteConnection; -import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager; -import org.eclipse.cdt.arduino.core.board.Board; +import org.eclipse.cdt.arduino.core.internal.IArduinoRemoteConnection; +import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoardManager; +import org.eclipse.cdt.arduino.core.internal.board.Board; import org.eclipse.cdt.arduino.ui.internal.Activator; import org.eclipse.cdt.arduino.ui.internal.Messages; import org.eclipse.cdt.serial.SerialPort; +import org.eclipse.core.runtime.CoreException; import org.eclipse.remote.core.IRemoteConnection; import org.eclipse.remote.core.IRemoteConnectionWorkingCopy; import org.eclipse.remote.core.exception.RemoteConnectionException; @@ -71,21 +72,25 @@ public class ArduinoTargetPropertyPage extends PropertyPage implements IWorkbenc boardSelector = new Combo(comp, SWT.READ_ONLY); boardSelector.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - Board currentBoard = ArduinoBoardManager.instance.getBoard(arduinoRemote.getBoardId(), - arduinoRemote.getPlatformId(), arduinoRemote.getPackageId()); - Collection boardList = ArduinoBoardManager.instance.getBoards(); - boards = new Board[boardList.size()]; - i = 0; - int boardSel = 0; - for (Board board : boardList) { - boards[i] = board; - boardSelector.add(board.getName()); - if (board.equals(currentBoard)) { - boardSel = i; + try { + Board currentBoard = ArduinoBoardManager.instance.getBoard(arduinoRemote.getBoardId(), + arduinoRemote.getPlatformId(), arduinoRemote.getPackageId()); + Collection boardList = ArduinoBoardManager.instance.getBoards(); + boards = new Board[boardList.size()]; + i = 0; + int boardSel = 0; + for (Board board : boardList) { + boards[i] = board; + boardSelector.add(board.getName()); + if (board.equals(currentBoard)) { + boardSel = i; + } + i++; } - i++; + boardSelector.select(boardSel); + } catch (CoreException e) { + Activator.log(e); } - boardSelector.select(boardSel); return comp; } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizard.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizard.java index a3d905a508e..3f6c5a0d9e7 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizard.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizard.java @@ -2,7 +2,7 @@ package org.eclipse.cdt.arduino.ui.internal.remote; import java.util.Set; -import org.eclipse.cdt.arduino.core.IArduinoRemoteConnection; +import org.eclipse.cdt.arduino.core.internal.IArduinoRemoteConnection; import org.eclipse.cdt.arduino.ui.internal.Activator; import org.eclipse.jface.wizard.Wizard; import org.eclipse.remote.core.IRemoteConnectionType; diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizardPage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizardPage.java index 955a5ad5c32..a5578823fc5 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizardPage.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizardPage.java @@ -2,11 +2,12 @@ package org.eclipse.cdt.arduino.ui.internal.remote; import java.io.IOException; -import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager; -import org.eclipse.cdt.arduino.core.board.Board; +import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoardManager; +import org.eclipse.cdt.arduino.core.internal.board.Board; import org.eclipse.cdt.arduino.ui.internal.Activator; import org.eclipse.cdt.arduino.ui.internal.Messages; import org.eclipse.cdt.serial.SerialPort; +import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyEvent; @@ -88,11 +89,15 @@ public class NewArduinoTargetWizardPage extends WizardPage { boardCombo = new Combo(comp, SWT.READ_ONLY); boardCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - boards = ArduinoBoardManager.instance.getBoards().toArray(new Board[0]); - for (Board board : boards) { - boardCombo.add(board.getName()); + try { + boards = ArduinoBoardManager.instance.getBoards().toArray(new Board[0]); + for (Board board : boards) { + boardCombo.add(board.getName()); + } + boardCombo.select(0); + } catch (CoreException e) { + Activator.log(e); } - boardCombo.select(0); boardCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) {