WarpPI/desktop/src/main/java/it/cavallium/warppi/desktop/DesktopPlatform.java
Riccardo Azzolini d8f401cb22 Remove zip file handling code and zip4j dependency
.zip files were only used to cache compiled Java rules, and the new rule
system has nothing to cache.
2019-10-25 20:49:31 +02:00

201 lines
5.0 KiB
Java

package it.cavallium.warppi.desktop;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import it.cavallium.warppi.Engine;
import it.cavallium.warppi.Platform;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.impl.jogl.JOGLEngine;
import it.cavallium.warppi.gui.graphicengine.impl.swing.SwingEngine;
import it.cavallium.warppi.util.CacheUtils;
import it.cavallium.warppi.util.Error;
public class DesktopPlatform implements Platform {
private final DesktopConsoleUtils cu;
private final DesktopGpio gi;
private final DesktopStorageUtils su;
private final ImageUtils pu;
private final String on;
private final Map<String, GraphicEngine> el;
private final DesktopSettings settings;
private Boolean runningOnRaspberryOverride = null;
public DesktopPlatform() {
cu = new DesktopConsoleUtils();
gi = new DesktopGpio();
su = new DesktopStorageUtils();
pu = new DesktopImageUtils();
on = System.getProperty("os.name").toLowerCase();
el = new HashMap<>();
el.put("CPU engine", new SwingEngine());
el.put("GPU engine", new JOGLEngine());
settings = new DesktopSettings();
}
@Override
public ConsoleUtils getConsoleUtils() {
return cu;
}
@Override
public Gpio getGpio() {
return gi;
}
@Override
public StorageUtils getStorageUtils() {
return su;
}
@Override
public ImageUtils getImageUtils() {
return pu;
}
@Override
public DesktopSettings getSettings() {
return settings;
}
@Override
public void setThreadName(final Thread t, final String name) {
t.setName(name);
}
@Override
public void setThreadDaemon(final Thread t) {
t.setDaemon(true);
}
@Override
public void setThreadDaemon(final Thread t, final boolean value) {
t.setDaemon(value);
}
@Override
public void exit(final int value) {
System.exit(value);
}
@Override
public void gc() {
System.gc();
}
@Override
public boolean isJavascript() {
return false;
}
@Override
public String getOsName() {
return on;
}
@Override
public void alphaChanged(final boolean val) {
final GraphicEngine currentEngine = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine;
if (currentEngine instanceof SwingEngine)
((SwingEngine) currentEngine).setAlphaChanged(val);
}
@Override
public void shiftChanged(final boolean val) {
final GraphicEngine currentEngine = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine;
if (currentEngine instanceof SwingEngine)
((SwingEngine) currentEngine).setShiftChanged(val);
}
@Override
public Semaphore newSemaphore() {
return new DesktopSemaphore(0);
}
@Override
public Semaphore newSemaphore(final int i) {
return new DesktopSemaphore(i);
}
@Override
public URLClassLoader newURLClassLoader(final URL[] urls) {
return new DesktopURLClassLoader(urls);
}
@Override
public Map<String, GraphicEngine> getEnginesList() {
return el;
}
@Override
public GraphicEngine getEngine(final String string) throws NullPointerException {
return el.get(string);
}
@Override
public void throwNewExceptionInInitializerError(final String text) {
throw new ExceptionInInitializerError();
}
@Override
public String[] stacktraceToString(final Error e) {
final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
return sw.toString().toUpperCase().replace("\t", " ").replace("\r", "").split("\n");
}
@Override
public List<String> getRuleFilePaths() throws IOException {
final File dslRulesPath = getStorageUtils().get("rules/");
List<String> paths = new ArrayList<>();
if (dslRulesPath.exists()) {
for (final File file : getStorageUtils().walk(dslRulesPath)) {
final String path = file.toString();
if (path.endsWith(".rules")) {
paths.add(path);
}
}
}
return paths;
}
@Override
public void setRunningOnRaspberry(boolean b) {
if (isRunningOnRaspberry()) {
runningOnRaspberryOverride = b;
} else {
runningOnRaspberryOverride = false;
}
}
@Override
public boolean isRunningOnRaspberry() {
if (runningOnRaspberryOverride != null) return runningOnRaspberryOverride;
return CacheUtils.get("isRunningOnRaspberry", 24 * 60 * 60 * 1000, () -> {
if (Engine.getPlatform().isJavascript())
return false;
if (Engine.getPlatform().getOsName().equals("Linux"))
try {
final File osRelease = new File("/etc", "os-release");
return FileUtils.readLines(osRelease, "UTF-8").stream().map(String::toLowerCase).anyMatch(line -> line.contains("raspbian") && line.contains("name"));
} catch (final IOException readException) {
return false;
}
else
return false;
});
}
}