Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java')
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java130
1 files changed, 85 insertions, 45 deletions
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java
index 1d18767598a..3aba4a82eda 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java
@@ -7,17 +7,25 @@
*******************************************************************************/
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.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
+import org.eclipse.cdt.arduino.core.internal.Activator;
import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences;
+import org.eclipse.core.runtime.CoreException;
public class ArduinoPackage {
+ // JSON fields
private String name;
private String maintainer;
private String websiteURL;
@@ -25,22 +33,9 @@ public class ArduinoPackage {
private ArduinoHelp help;
private List<ArduinoPlatform> platforms;
private List<ArduinoTool> tools;
+ // end JSON fields
- private transient ArduinoManager manager;
-
- void setOwner(ArduinoManager manager) {
- this.manager = manager;
- for (ArduinoPlatform platform : platforms) {
- platform.setOwner(this);
- }
- for (ArduinoTool tool : tools) {
- tool.setOwner(this);
- }
- }
-
- ArduinoManager getManager() {
- return manager;
- }
+ private Map<String, ArduinoPlatform> installedPlatforms;
public String getName() {
return name;
@@ -66,51 +61,96 @@ public class ArduinoPackage {
return Collections.unmodifiableCollection(platforms);
}
+ void init() {
+ for (ArduinoPlatform platform : platforms) {
+ platform.init(this);
+ }
+ for (ArduinoTool tool : tools) {
+ tool.init(this);
+ }
+ }
+
+ public ArduinoPlatform getPlatform(String architecture, String version) {
+ if (platforms != null) {
+ for (ArduinoPlatform plat : platforms) {
+ if (plat.getArchitecture().equals(architecture) && plat.getVersion().equals(version)) {
+ return plat;
+ }
+ }
+ }
+ return null;
+ }
+
public Path getInstallPath() {
return ArduinoPreferences.getArduinoHome().resolve("packages").resolve(getName()); //$NON-NLS-1$
}
- /**
- * Only the latest versions of the platforms.
- *
- * @return latest platforms
- */
- public Map<String, ArduinoPlatform> getAvailablePlatforms() {
- Map<String, ArduinoPlatform> platformMap = new HashMap<>();
- for (ArduinoPlatform platform : platforms) {
- ArduinoPlatform p = platformMap.get(platform.getName());
- if (p == null || ArduinoManager.compareVersions(platform.getVersion(), p.getVersion()) > 0) {
- platformMap.put(platform.getName(), platform);
+ private void initInstalledPlatforms() throws CoreException {
+ if (installedPlatforms == null) {
+ installedPlatforms = new HashMap<>();
+
+ if (Files.isDirectory(getInstallPath())) {
+ Path platformTxt = Paths.get("platform.txt"); //$NON-NLS-1$
+ try {
+ Files.find(getInstallPath().resolve("hardware"), 2, //$NON-NLS-1$
+ (path, attrs) -> path.getFileName().equals(platformTxt))
+ .forEach(path -> {
+ try (FileReader reader = new FileReader(path.toFile())) {
+ Properties platformProperties = new Properties();
+ platformProperties.load(reader);
+ String arch = path.getName(path.getNameCount() - 2).toString();
+ String version = platformProperties.getProperty("version"); //$NON-NLS-1$
+
+ ArduinoPlatform platform = getPlatform(arch, version);
+ if (platform != null) {
+ platform.setPlatformProperties(platformProperties);
+ installedPlatforms.put(arch, platform);
+ } // TODO manually add it if was removed from index
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ });
+ } catch (IOException e) {
+ throw Activator.coreException(e);
+ }
}
}
- return platformMap;
}
- public Map<String, ArduinoPlatform> getInstalledPlatforms() {
- Map<String, ArduinoPlatform> platformMap = new HashMap<>();
- for (ArduinoPlatform platform : platforms) {
- if (platform.isInstalled()) {
- platformMap.put(platform.getName(), platform);
- }
+ public Collection<ArduinoPlatform> getInstalledPlatforms() throws CoreException {
+ initInstalledPlatforms();
+ return installedPlatforms.values();
+ }
+
+ public ArduinoPlatform getInstalledPlatform(String architecture) throws CoreException {
+ if (architecture == null) {
+ return null;
+ } else {
+ initInstalledPlatforms();
+ return installedPlatforms.get(architecture);
}
- return platformMap;
}
- public ArduinoPlatform getPlatform(String name) {
- ArduinoPlatform foundPlatform = null;
+ void platformInstalled(ArduinoPlatform platform) {
+ installedPlatforms.put(platform.getArchitecture(), platform);
+ }
+
+ void platformUninstalled(ArduinoPlatform platform) {
+ installedPlatforms.remove(platform.getArchitecture());
+ }
+
+ public Collection<ArduinoPlatform> getAvailablePlatforms() throws CoreException {
+ initInstalledPlatforms();
+ Map<String, ArduinoPlatform> platformMap = new HashMap<>();
for (ArduinoPlatform platform : platforms) {
- if (platform.getName().equals(name)) {
- if (foundPlatform == null) {
- foundPlatform = platform;
- } else {
- if (platform.isInstalled()
- && ArduinoManager.compareVersions(platform.getVersion(), foundPlatform.getVersion()) > 0) {
- foundPlatform = platform;
- }
+ if (!installedPlatforms.containsKey(platform.getArchitecture())) {
+ ArduinoPlatform p = platformMap.get(platform.getName());
+ if (p == null || ArduinoManager.compareVersions(platform.getVersion(), p.getVersion()) > 0) {
+ platformMap.put(platform.getName(), platform);
}
}
}
- return foundPlatform;
+ return platformMap.values();
}
public List<ArduinoTool> getTools() {

Back to the top