From 832f2bb89956ee8758727b084ce4c88e1a9ba977 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Tue, 1 Sep 2015 22:39:10 -0400 Subject: [PATCH] Add support for multiple board packages suppliers. Default URLs for Arduino and the ESP8266 community. Preference page to allow user to add their own. Change-Id: I6b134712d3189ae3559cae3e412acd7d3b1df7f1 --- .../cdt/arduino/core/tests/BoardManagerTests.java | 4 +- .../arduino/core/internal/ArduinoPreferences.java | 35 ++++- .../core/internal/board/ArduinoManager.java | 150 ++++++++++++++------- .../core/internal/board/ArduinoToolSystem.java | 2 +- .../core/internal/board/ToolDependency.java | 2 +- .../arduino/org.eclipse.cdt.arduino.ui/plugin.xml | 6 - .../eclipse/cdt/arduino/ui/internal/Activator.java | 19 +-- .../eclipse/cdt/arduino/ui/internal/Messages.java | 3 +- .../cdt/arduino/ui/internal/messages.properties | 3 +- .../preferences/ArduinoBoardsPreferencePage.java | 19 +-- .../preferences/ArduinoPreferenceInitializer.java | 23 ---- .../preferences/ArduinoPreferencePage.java | 55 +++++--- 12 files changed, 183 insertions(+), 138 deletions(-) delete mode 100644 toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferenceInitializer.java 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 8641687..d9005b1 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 @@ -1,6 +1,6 @@ package org.eclipse.cdt.arduino.core.tests; -import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNotEquals; import org.eclipse.cdt.arduino.core.internal.board.ArduinoManager; import org.junit.Test; @@ -9,7 +9,7 @@ public class BoardManagerTests { @Test public void loadPackagesTest() throws Exception { - assertNotNull(ArduinoManager.instance.getPackageIndex()); + assertNotEquals(0, ArduinoManager.instance.getPackageIndices().size()); } } 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 index a131ec1..534b0dc 100644 --- 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 @@ -10,19 +10,42 @@ package org.eclipse.cdt.arduino.core.internal; import java.nio.file.Path; import java.nio.file.Paths; -import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.preferences.IEclipsePreferences; +import org.eclipse.core.runtime.preferences.InstanceScope; +import org.osgi.service.prefs.BackingStoreException; public class ArduinoPreferences { - public static String ARDUINO_HOME = "arduinoHome"; //$NON-NLS-1$ + private static final String ARDUINO_HOME = "arduinoHome"; //$NON-NLS-1$ + private static final String BOARD_URLS = "boardUrls"; //$NON-NLS-1$ + + private static final String defaultHome = Paths.get(System.getProperty("user.home"), ".arduinocdt").toString(); //$NON-NLS-1$ //$NON-NLS-2$ + private static final String defaultBoardUrls = "http://downloads.arduino.cc/packages/package_index.json" //$NON-NLS-1$ + + "\nhttp://arduino.esp8266.com/stable/package_esp8266com_index.json"; //$NON-NLS-1$ + + private static IEclipsePreferences getPrefs() { + return InstanceScope.INSTANCE.getNode(Activator.getId()); + } public static Path getArduinoHome() { - String pathStr = Platform.getPreferencesService().getString(Activator.getId(), ARDUINO_HOME, null, null); - return pathStr != null ? Paths.get(pathStr) : getDefaultArduinoHome(); + return Paths.get(getPrefs().get(ARDUINO_HOME, defaultHome)); } - public static Path getDefaultArduinoHome() { - return Paths.get(System.getProperty("user.home"), ".arduinocdt"); //$NON-NLS-1$ //$NON-NLS-2$ + public static String getBoardUrls() { + return getPrefs().get(BOARD_URLS, defaultBoardUrls); } + public static void setBoardUrls(String boardUrls) { + IEclipsePreferences prefs = getPrefs(); + prefs.put(BOARD_URLS, boardUrls); + try { + prefs.flush(); + } catch (BackingStoreException e) { + Activator.log(e); + } + } + + public static String getDefaultBoardUrls() { + return defaultBoardUrls; + } } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java index d712bc4..878af4f 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java @@ -16,10 +16,12 @@ import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; +import java.io.Reader; import java.lang.reflect.Type; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.nio.file.attribute.PosixFilePermission; import java.util.ArrayList; @@ -65,69 +67,107 @@ public class ArduinoManager { 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$ - private Path packageIndexPath = ArduinoPreferences.getArduinoHome().resolve("package_index.json"); //$NON-NLS-1$ - private PackageIndex packageIndex; - - private Path libraryIndexPath = ArduinoPreferences.getArduinoHome().resolve("library_index.json"); //$NON-NLS-1$ + public static final String LIBRARIES_URL = "http://downloads.arduino.cc/libraries/library_index.json"; //$NON-NLS-1$ + private List packageIndices; private LibraryIndex libraryIndex; - public ArduinoManager() { + public void loadIndices() { new Job(Messages.ArduinoBoardManager_0) { protected IStatus run(IProgressMonitor monitor) { - try { - // library index has the same parent right now - Files.createDirectories(packageIndexPath.getParent()); - - URL packageUrl = new URL("http://downloads.arduino.cc/packages/package_index.json"); //$NON-NLS-1$ - try (InputStream in = packageUrl.openStream()) { - Files.copy(in, packageIndexPath, StandardCopyOption.REPLACE_EXISTING); - } - - URL libraryUrl = new URL("http://downloads.arduino.cc/libraries/library_index.json"); //$NON-NLS-1$ - try (InputStream in = libraryUrl.openStream()) { - Files.copy(in, libraryIndexPath, StandardCopyOption.REPLACE_EXISTING); - } - } catch (IOException e) { - return new Status(IStatus.ERROR, Activator.getId(), e.getLocalizedMessage(), e); + String[] boardUrls = ArduinoPreferences.getBoardUrls().split("\n"); //$NON-NLS-1$ + packageIndices = new ArrayList<>(boardUrls.length); + for (String boardUrl : boardUrls) { + loadPackageIndex(boardUrl, true); } + + loadLibraryIndex(true); return Status.OK_STATUS; } }.schedule(); } - public PackageIndex getPackageIndex() throws CoreException { - if (packageIndex == null) { - try (FileReader reader = new FileReader(packageIndexPath.toFile())) { - packageIndex = new Gson().fromJson(reader, PackageIndex.class); - packageIndex.setOwners(this); - } catch (IOException e) { - throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), "Reading package index", e)); + private void loadPackageIndex(String url, boolean download) { + try { + URL packageUrl = new URL(url.trim()); + Path packagePath = ArduinoPreferences.getArduinoHome() + .resolve(Paths.get(packageUrl.getPath()).getFileName()); + File packageFile = packagePath.toFile(); + if (download) { + Files.copy(packageUrl.openStream(), packagePath, StandardCopyOption.REPLACE_EXISTING); + } + if (packageFile.exists()) { + try (Reader reader = new FileReader(packageFile)) { + PackageIndex index = new Gson().fromJson(reader, PackageIndex.class); + index.setOwners(ArduinoManager.this); + packageIndices.add(index); + } + } + } catch (IOException e) { + Activator.log(e); + } + } + + public List getPackageIndices() throws CoreException { + if (packageIndices == null) { + String[] boardUrls = ArduinoPreferences.getBoardUrls().split("\n"); //$NON-NLS-1$ + packageIndices = new ArrayList<>(boardUrls.length); + for (String boardUrl : boardUrls) { + loadPackageIndex(boardUrl, false); + } + } + return packageIndices; + } + + private void loadLibraryIndex(boolean download) { + try { + URL librariesUrl = new URL(LIBRARIES_URL); + Path librariesPath = ArduinoPreferences.getArduinoHome() + .resolve(Paths.get(librariesUrl.getPath()).getFileName()); + File librariesFile = librariesPath.toFile(); + if (download) { + Files.copy(librariesUrl.openStream(), librariesPath, StandardCopyOption.REPLACE_EXISTING); + } + if (librariesFile.exists()) { + try (Reader reader = new FileReader(librariesFile)) { + libraryIndex = new Gson().fromJson(reader, LibraryIndex.class); + } } + } catch (IOException e) { + Activator.log(e); } - return packageIndex; + } public LibraryIndex getLibraryIndex() throws CoreException { if (libraryIndex == null) { - try (FileReader reader = new FileReader(libraryIndexPath.toFile())) { - libraryIndex = new Gson().fromJson(reader, LibraryIndex.class); - libraryIndex.resolve(); - } catch (IOException e) { - throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), "Reading library index", e)); - } + loadLibraryIndex(false); } return libraryIndex; } public ArduinoBoard getBoard(String boardName, String platformName, String packageName) throws CoreException { - return getPackageIndex().getPackage(packageName).getPlatform(platformName).getBoard(boardName); + for (PackageIndex index : packageIndices) { + ArduinoPackage pkg = index.getPackage(packageName); + if (pkg != null) { + ArduinoPlatform platform = pkg.getPlatform(platformName); + if (platform != null) { + ArduinoBoard board = platform.getBoard(boardName); + if (board != null) { + return board; + } + } + } + } + return null; } public List getBoards() throws CoreException { List boards = new ArrayList<>(); - for (ArduinoPackage pkg : getPackageIndex().getPackages()) { - for (ArduinoPlatform platform : pkg.getLatestPlatforms()) { - boards.addAll(platform.getBoards()); + for (PackageIndex index : packageIndices) { + for (ArduinoPackage pkg : index.getPackages()) { + for (ArduinoPlatform platform : pkg.getLatestPlatforms()) { + boards.addAll(platform.getBoards()); + } } } return boards; @@ -135,17 +175,37 @@ public class ArduinoManager { public List getInstalledBoards() throws CoreException { List boards = new ArrayList<>(); - for (ArduinoPackage pkg : getPackageIndex().getPackages()) { - for (ArduinoPlatform platform : pkg.getInstalledPlatforms()) { - boards.addAll(platform.getBoards()); + for (PackageIndex index : packageIndices) { + for (ArduinoPackage pkg : index.getPackages()) { + for (ArduinoPlatform platform : pkg.getInstalledPlatforms()) { + boards.addAll(platform.getBoards()); + } } } return boards; } + public ArduinoPackage getPackage(String packageName) { + for (PackageIndex index : packageIndices) { + ArduinoPackage pkg = index.getPackage(packageName); + if (pkg != null) { + return pkg; + } + } + return null; + } + public ArduinoTool getTool(String packageName, String toolName, String version) { - ArduinoPackage pkg = packageIndex.getPackage(packageName); - return pkg != null ? pkg.getTool(toolName, version) : null; + for (PackageIndex index : packageIndices) { + ArduinoPackage pkg = index.getPackage(packageName); + if (pkg != null) { + ArduinoTool tool = pkg.getTool(toolName, version); + if (tool != null) { + return tool; + } + } + } + return null; } private static final String LIBRARIES = "libraries"; //$NON-NLS-1$ @@ -178,7 +238,7 @@ public class ArduinoManager { try { settings.flush(); } catch (BackingStoreException e) { - throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), "Saving preferences", e)); + Activator.log(e); } new Job("Install libraries") { @@ -209,7 +269,7 @@ public class ArduinoManager { IProgressMonitor monitor) { try { URL dl = new URL(url); - Path dlDir = ArduinoPreferences.getArduinoHome().resolve("downloads"); + Path dlDir = ArduinoPreferences.getArduinoHome().resolve("downloads"); //$NON-NLS-1$ Files.createDirectories(dlDir); Path archivePath = dlDir.resolve(archiveFileName); Files.copy(dl.openStream(), archivePath, StandardCopyOption.REPLACE_EXISTING); diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoToolSystem.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoToolSystem.java index 0a5d985..669dd36 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoToolSystem.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoToolSystem.java @@ -52,7 +52,7 @@ public class ArduinoToolSystem { case Platform.OS_MACOSX: switch (host) { case "i386-apple-darwin11": //$NON-NLS-1$ - case "x86_64-apple-darwin:": //$NON-NLS-1$ + case "x86_64-apple-darwin": //$NON-NLS-1$ return true; default: return false; 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 index c69e02b..8bd1ef3 100644 --- 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 @@ -40,7 +40,7 @@ public class ToolDependency { public ArduinoTool getTool() throws CoreException { ArduinoPackage pkg = platform.getPackage(); if (!pkg.getName().equals(packager)) { - pkg = pkg.getManager().getPackageIndex().getPackage(packager); + pkg = pkg.getManager().getPackage(packager); } return pkg.getTool(name, version); diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml b/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml index 7971aae..80dd755 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml @@ -96,10 +96,4 @@ name="Boards"> - - - - 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 c76e0d3..11f8406 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 @@ -10,16 +10,12 @@ *******************************************************************************/ package org.eclipse.cdt.arduino.ui.internal; +import org.eclipse.cdt.arduino.core.internal.board.ArduinoManager; 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.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.eclipse.ui.progress.UIJob; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -28,8 +24,6 @@ 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$ @@ -42,6 +36,8 @@ public class Activator extends AbstractUIPlugin { public void start(BundleContext context) throws Exception { super.start(context); plugin = this; + // Load up the Arduino indices + ArduinoManager.instance.loadIndices(); } public void stop(BundleContext context) throws Exception { @@ -56,7 +52,7 @@ public class Activator extends AbstractUIPlugin { registry.put(IMG_CONNECTION_TYPE, imageDescriptorFromPlugin(PLUGIN_ID, "icons/arduino.png")); //$NON-NLS-1$ return registry; } - + /** * Returns the shared instance * @@ -88,11 +84,4 @@ 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/Messages.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Messages.java index 62bbb5f..84d2fe5 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Messages.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Messages.java @@ -7,8 +7,6 @@ public class Messages extends NLS { public static String ArduinoLaunchConsole_0; public static String ArduinoLaunchConsole_1; public static String ArduinoLaunchConsole_2; - public static String ArduinoPreferencePage_0; - public static String ArduinoPreferencePage_1; public static String ArduinoTargetPropertyPage_0; public static String ArduinoTargetPropertyPage_1; public static String ArduinoTargetPropertyPage_2; @@ -21,6 +19,7 @@ public class Messages extends NLS { public static String NewArduinoTargetWizardPage_5; public static String ArduinoBoardsPreferencePage_desc; public static String LibrariesPropertyPage_desc; + public static String ArduinoPreferencePage_desc; static { // initialize resource bundle diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties index 0062fba..8221059 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties @@ -1,8 +1,6 @@ ArduinoLaunchConsole_0=Arduino ArduinoLaunchConsole_1=Start Arduino Console ArduinoLaunchConsole_2=Arduino Console Output -ArduinoPreferencePage_0=Arduino IDE Install Location -ArduinoPreferencePage_1=Arduino C++ Preferences ArduinoTargetPropertyPage_0=Serial Port: ArduinoTargetPropertyPage_1=No serial ports ArduinoTargetPropertyPage_2=Board type: @@ -19,3 +17,4 @@ libraries and tools. For more information, see http://arduino.cc. LibrariesPropertyPage_desc=Select libraries to use in your project and click OK or Apply. \ If necessary the library will be installed. By adding libraries you agree to the licenses of those \ libraries. For more information, see http://arduino.cc +ArduinoPreferencePage_desc=Enter URLs for package_index.json files one per line. \ No newline at end of file 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 index 1a1d454..65680e8 100644 --- 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 @@ -7,7 +7,6 @@ *******************************************************************************/ package org.eclipse.cdt.arduino.ui.internal.preferences; -import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; @@ -16,9 +15,7 @@ import java.util.Set; import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoard; import org.eclipse.cdt.arduino.core.internal.board.ArduinoManager; -import org.eclipse.cdt.arduino.core.internal.board.ArduinoPackage; import org.eclipse.cdt.arduino.core.internal.board.ArduinoPlatform; -import org.eclipse.cdt.arduino.core.internal.board.PackageIndex; import org.eclipse.cdt.arduino.ui.internal.Activator; import org.eclipse.cdt.arduino.ui.internal.Messages; import org.eclipse.core.runtime.CoreException; @@ -52,7 +49,6 @@ public class ArduinoBoardsPreferencePage extends PreferencePage implements IWork @Override public void init(IWorkbench workbench) { - setPreferenceStore(Activator.getDefault().getCorePreferenceStore()); } @Override @@ -136,20 +132,7 @@ public class ArduinoBoardsPreferencePage extends PreferencePage implements IWork table.removeAll(); try { - PackageIndex packageIndex = ArduinoManager.instance.getPackageIndex(); - List boards = new ArrayList<>(); - for (ArduinoPackage pkg : packageIndex.getPackages()) { - for (ArduinoPlatform platform : pkg.getLatestPlatforms()) { - try { - for (ArduinoBoard board : platform.getBoards()) { - boards.add(board); - } - } catch (CoreException e) { - Activator.log(e); - } - } - } - + List boards = ArduinoManager.instance.getBoards(); Collections.sort(boards, new Comparator() { public int compare(ArduinoBoard o1, ArduinoBoard o2) { return o1.getName().compareTo(o2.getName()); 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 deleted file mode 100644 index 914192a..0000000 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferenceInitializer.java +++ /dev/null @@ -1,23 +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 - *******************************************************************************/ -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/preferences/ArduinoPreferencePage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferencePage.java index ef64075..50f1c78 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferencePage.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferencePage.java @@ -11,37 +11,58 @@ 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.cdt.arduino.core.internal.board.ArduinoManager; 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.jface.preference.PreferencePage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; -public class ArduinoPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { +public class ArduinoPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - public ArduinoPreferencePage() { - super(GRID); + private Text urlsText; + + @Override + public void init(IWorkbench workbench) { } @Override - public IPreferenceStore getPreferenceStore() { - // TODO Auto-generated method stub - return super.getPreferenceStore(); + protected Control createContents(Composite parent) { + Composite control = new Composite(parent, SWT.NONE); + control.setLayout(new GridLayout()); + + Text desc = new Text(control, SWT.READ_ONLY | SWT.WRAP); + GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, false); + layoutData.widthHint = 500; + desc.setLayoutData(layoutData); + desc.setBackground(parent.getBackground()); + desc.setText(Messages.ArduinoPreferencePage_desc); + + urlsText = new Text(control, SWT.BORDER); + urlsText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + urlsText.setText(ArduinoPreferences.getBoardUrls()); + + return control; } @Override - protected void createFieldEditors() { - addField(new DirectoryFieldEditor(ArduinoPreferences.ARDUINO_HOME, Messages.ArduinoPreferencePage_0, - getFieldEditorParent())); + public boolean performOk() { + ArduinoPreferences.setBoardUrls(urlsText.getText()); + ArduinoManager.instance.loadIndices(); + return true; } @Override - public void init(IWorkbench workbench) { - setDescription(Messages.ArduinoPreferencePage_1); - // Preferences are stored in core - setPreferenceStore(Activator.getDefault().getCorePreferenceStore()); + protected void performDefaults() { + String defaultBoardUrl = ArduinoPreferences.getDefaultBoardUrls(); + urlsText.setText(defaultBoardUrl); + ArduinoPreferences.setBoardUrls(defaultBoardUrl); + super.performDefaults(); } } -- 2.7.4