Skip to content
Commits on Source (192)
language: java
jdk:
- oraclejdk9
env:
global:
- secure: jvU9WepkajerjWq+kt+3e+RXyTj6+MntjMZ0aqR8f3NMgWzpIDAlu0WhMVq0P6577UXfhWdbS2DwN/HliBnPDD9pglTeghbcS7NzpnW4VMyGgH7AqbXs3/2MbGqNQofEdfDfGF5VgmVvA7koff1vUbC8NDnt64y3mN77fko6m2s=
- secure: R48kJN/o/7Pt9bgm7TDAQ0kI9i34Cj+OFPNR4HYFsQ1ebmxRCgciLLlN9cTRC7NfB4PgzeCh0dbtX0SDen7KCDUyW87xyHLYq7gINuAXnzAzLA70fJdxgJNY/UfQWeGcgiY6IaNsS8dmWWiS+pVNTMzylE26azAnkez5Jt2/3Ww=
- secure: EDrnUMT3ma+IxaiYFXWDNRPIblukg2jSc3sbkDOqLQFYcwlDX74RWRRW8xpUcL8xTBT4iVWmFPFKzp3I4923zj8lY7esozrG/eGMRatzAYncUChTD7nYKih/CANvNi6tOvMS5ybDY93m0+hzyyw5rndlt4a6v7RrqB1U/BnzKkM=
- secure: NLPUv6n8naSshSHrP4tJ07ehhMzH6MQ8bZDI+0lDfM/Te09Pwcr0uxvZw6sqOazBKHudX9L8x67C5Lf0hcclwyJ2aG+p/o1B863vvZ2/FGG774NnxTRn3OIdAThncCx4bwb8zwVwe1wHoeVbAirU/hqBGk2dxFjcl0R6/op+kZo=
- secure: pz/24si1S12ExDvssNmFNotkbFNPliwCcU6AXSHTgcZbspCbn0VL4kSHfCAAiwW1yjABjwlcyyphcRsznGi6htT+HWeNNf3XoCEQLZYomqg7+3sQ46zhjCfiMabBTcQ7GSibuT9j9AGjPzwhkq1usVxCskOKI2SmRsrZh7EJDkg=
- secure: z+0Gt2sGsiNv5nJZosXY6NlRKEP+WO32Q9xvx2vI8Iai6X60wN6wpfGXqbCl6BjJTUzy+mx8sMYJ6s5Ex9I2cwgLq8wrhIhFC+Xy+pHRSELr0wsfFOJEFKhOTgeJObYXvz8yKTcZqFLjwAQ7k3dun69/tIlZdIhFvstZ+qRwGFo=
- secure: IjgpHg4X8G1h6yMrmZR2b6zJBLoUNp++7sNJz1dbs5W+4RvOsyqXaA6Cbmo9efDRoMHEUBLxQl71UR8+lZugMkx0dUhWZrQHIgLDfAKwln60YonfId+l6zSn9R45jdEpw7pi/20T/TnVJsHxwhIVGKuut3oeHtniRSKLjMJBvCs=
- secure: T2XtX4RdJaOraIqaPjDgHrRceF40+mcGLxXI+4y+q7ClOkO211T08TrmlZfHFZauqSrsdV7GbFr0OceMxVCx86tfctpZ/fsY1K0XZmiQJgiGzegGOwbBZ+uhUp7+Etqv5kLlUoURzs2XvBx33q3pZkvUzhLJVcaI6E3aCWhcib4=
before_install:
- openssl aes-256-cbc -K $encrypted_622334dd6b80_key -iv $encrypted_622334dd6b80_iv
-in codesigning/codesigning.asc.enc -out codesigning/codesigning.asc -d
install: mvn install -DskipTests=true -B
before_script:
- gpg --fast-import codesigning/codesigning.asc
script:
- echo ---------- deploy
- ". Setup/target/classes/content/deployOSSRH"
- echo ------- javadocs
- ". Setup/target/classes/content/createJavadocs"
- echo ------- nightly
- ". Setup/target/classes/content/createNightly"
deploy:
provider: pages
skip_cleanup: true
github_token: $GITHUB_TOKEN
local_dir: pages
on:
branch: develop
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2010-2016, Sikuli.org, sikulix.com
~ Released under the MIT License.
~
~ Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--
* Copyright 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* RaiMan 2014
-->
<modelVersion>4.0.0</modelVersion>
<groupId>com.sikulix</groupId>
<artifactId>sikulixapi</artifactId>
<version>1.1.1</version>
<version>1.1.2-SNAPSHOT</version>
<packaging>jar</packaging>
......@@ -48,43 +39,11 @@
<url>git@github.com:RaiMan/SikuliX-2014.git</url>
</scm>
<profiles>
<profile>
<id>Windows</id>
<activation>
<os>
<family>windows</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibswin</sikulix.libs>
</properties>
</profile>
<profile>
<id>Unix</id>
<activation>
<os>
<family>unix</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibslux</sikulix.libs>
</properties>
</profile>
<profile>
<id>Mac</id>
<activation>
<os>
<family>mac</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibsmac</sikulix.libs>
</properties>
</profile>
</profiles>
<repositories>
<repository>
<id>sonatype-ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
......@@ -102,16 +61,23 @@
<artifactId>commons-exec</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>com.github.tulskiy</groupId>
<!--GNU Lesser General Public License v3.0-->
<!--https://github.com/tulskiy/jkeymaster-->
<artifactId>jkeymaster</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>com.melloware</groupId>
<artifactId>jintellitype</artifactId>
......@@ -130,13 +96,12 @@
<dependency>
<groupId>com.sikulix</groupId>
<artifactId>${sikulix.libs}</artifactId>
<version>${project.version}</version>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
<groupId>com.sikulix</groupId>
<artifactId>sikulix2tigervnc</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
......@@ -145,57 +110,85 @@
</properties>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>sikulix.deploy</id>
<url>${sikulix.deploy.target}</url>
<id>maven</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<profiles>
<profile>
<id>Windows</id>
<activation>
<os>
<family>windows</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibswin</sikulix.libs>
</properties>
</profile>
<profile>
<id>Unix</id>
<activation>
<os>
<family>unix</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibslux</sikulix.libs>
</properties>
</profile>
<profile>
<id>Mac</id>
<activation>
<os>
<family>mac</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibsmac</sikulix.libs>
</properties>
</profile>
<profile>
<id>sign</id>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>org.sikuli.script.Sikulix</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<configuration>
<excludePackageNames>org.opencv.*</excludePackageNames>
<show>public</show>
<quiet>true</quiet>
</configuration>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>attach-javadocs</id>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>build-extras</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.3</version>
<version>2.4</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
......@@ -204,18 +197,48 @@
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.3</version>
<configuration>
<excludePackageNames>
org.opencv:jxgrabkey
</excludePackageNames>
</configuration>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<id>attach-javadocs</id>
<goals>
<goal>sign</goal>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>org.sikuli.script.Sikulix</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
<?xml version="1.0"?>
<!--
~ Copyright (c) 2010-2016, Sikuli.org, sikulix.com
~ Released under the MIT License.
~
~ Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--
* Copyright 2010-2015, Sikuli.org, sikulix.com
* Released under the MIT License.
-->
<parent>
<groupId>com.sikulix</groupId>
<artifactId>sikulix1</artifactId>
<version>1.1.1</version>
<version>1.1.2-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
......@@ -24,7 +17,7 @@
<groupId>com.sikulix</groupId>
<artifactId>sikulixapi</artifactId>
<version>1.1.1</version>
<version>1.1.2-SNAPSHOT</version>
<profiles>
<profile>
......@@ -64,8 +57,12 @@
<repositories>
<repository>
<id>sikulix-local</id>
<url>file://${project.basedir}/lib</url>
<id>sonatype-ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
......@@ -74,48 +71,60 @@
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
<!--License Apache 2-->
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-exec</artifactId>
<version>1.3</version>
<!--License Apache 2-->
</dependency>
<!--
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
-->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.4</version>
<!--License Apache 2-->
</dependency>
<dependency>
<groupId>com.github.tulskiy</groupId>
<!--GNU Lesser General Public License v3.0-->
<!--https://github.com/tulskiy/jkeymaster-->
<artifactId>jkeymaster</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>com.melloware</groupId>
<artifactId>jintellitype</artifactId>
<version>1.3.9</version>
<!--License Apache 2-->
</dependency>
<dependency>
<groupId>com.nativelibs4java</groupId>
<artifactId>bridj</artifactId>
<version>0.7.0</version>
<!--License New BSD License (GPL-compatible)-->
</dependency>
<dependency>
<groupId>com.github.vidstige</groupId>
<artifactId>jadb</artifactId>
<version>-v1.0-g94ebf38-23</version>
<!--License Apache 2-->
</dependency>
<dependency>
<groupId>com.sikulix</groupId>
<artifactId>${sikulix.libs}</artifactId>
<version>${project.version}</version>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.tigervnc</groupId>
<artifactId>vncviewer</artifactId>
<version>1.7.1</version>
<groupId>com.sikulix</groupId>
<artifactId>sikulix2tigervnc</artifactId>
<version>2.0.0-SNAPSHOT</version>
<!--License GPLv2-->
</dependency>
</dependencies>
......@@ -135,17 +144,6 @@
<exclude>Settings/*</exclude>
</excludes>
</resource>
<resource>
<directory>
../JRubyGem/lib/sikulix
</directory>
<includes>
<include>
sikulix*
</include>
</includes>
<targetPath>Lib</targetPath>
</resource>
</resources>
<plugins>
<plugin>
......@@ -159,36 +157,6 @@
</archive>
</configuration>
</plugin>
<!-- <plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<configuration>
<excludePackageNames>org.opencv.*;edu.unh.*</excludePackageNames>
<show>public</show>
<quiet>true</quiet>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>-->
</plugins>
</build>
</project>
/*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.android;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.android;
......@@ -140,11 +138,7 @@ public class ADBDevice {
}
public BufferedImage captureDeviceScreen() {
return captureDeviceScreen(0, 0, devW, devH);
}
public BufferedImage captureDeviceScreen(int y, int _h) {
return captureDeviceScreen(0, y, devW, _h);
return captureDeviceScreen(0, 0, -1, -1);
}
public BufferedImage captureDeviceScreen(int x, int y, int w, int h) {
......@@ -158,18 +152,14 @@ public class ADBDevice {
return bImage;
}
public Mat captureDeviceScreenMat(int x, int y, int w, int h) {
public Mat captureDeviceScreenMat(int x, int y, int actW, int actH) {
byte[] imagePrefix = new byte[12];
byte[] image = new byte[0];
int actW = w;
if (x + w > devW) {
actW = devW - x;
}
int actH = h;
if (y + h > devH) {
actH = devH - y;
}
Debug timer = Debug.startTimer();
boolean isfullScreen =false;
if (x == 0 && y == 0 && actW < 0 && actH < 0) {
isfullScreen = true;
}
try {
InputStream stdout = device.executeShell("screencap");
stdout.read(imagePrefix);
......@@ -177,17 +167,30 @@ public class ADBDevice {
log(-1, "captureDeviceScreenMat: image type not RGBA");
return null;
}
if (byte2int(imagePrefix, 0, 4) != devW || byte2int(imagePrefix, 4, 4) != devH) {
int currentW = byte2int(imagePrefix, 0, 4);
int currentH = byte2int(imagePrefix, 4, 4);
if (! ((currentW == devW && currentH == devH) || (currentH == devW && currentW == devH))) {
log(-1, "captureDeviceScreenMat: width or height differ from device values");
return null;
}
if (isfullScreen) {
actW = currentW;
actH = currentH;
} else {
if (x + actW > currentW) {
actW = currentW - x;
}
if (y + actW > currentH) {
actH = currentH - y;
}
}
image = new byte[actW * actH * 4];
int lenRow = devW * 4;
int lenRow = currentW * 4;
byte[] row = new byte[lenRow];
for (int count = 0; count < y; count++) {
stdout.read(row);
}
boolean shortRow = x + actW < devW;
boolean shortRow = x + actW < currentW;
for (int count = 0; count < actH; count++) {
if (shortRow) {
stdout.read(row);
......
/*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.android;
import org.sikuli.basics.Debug;
......
/*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.android;
import org.sikuli.basics.Debug;
......@@ -137,7 +141,7 @@ public class ADBScreen extends Region implements EventObserver, IScreen {
@Override
public ScreenImage capture() {
return capture(x, y, w, h);
return capture(x, y, -1, -1);
}
@Override
......@@ -236,16 +240,46 @@ public class ADBScreen extends Region implements EventObserver, IScreen {
return 0;
}
public Region set(Region element) {
return setOther(element);
}
public Location set(Location element) {
return setOther(element);
}
@Override
public Region setOther(Region element) {
return element.setOtherScreen(this);
}
@Override
public Location setOther(Location element) {
return element.setOtherScreen(this);
}
@Override
public Region newRegion(Location loc, int width, int height) {
return new Region(loc.x, loc.y, width, height, this);
}
@Override
public Region newRegion(Region reg) {
return new Region(reg).setOtherScreen(this);
}
@Override
public Region newRegion(int _x, int _y, int width, int height) {
return new Region(_x, _y, width, height, this);
}
@Override
public Location newLocation(int _x, int _y) {
return new Location(_x, _y).setOtherScreen(this);
}
@Override
public Location newLocation(Location loc) {
return new Location(loc).setOtherScreen(this);
}
}
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.android;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
* Copyright (c) 2010-2017, sikuli.org, sikulix.com - MIT license
*/
package org.sikuli.basics;
......@@ -32,11 +30,7 @@ import java.net.URLDecoder;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
import java.security.CodeSource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Random;
import java.util.Set;
import java.util.*;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
......@@ -898,6 +892,10 @@ public class FileManager {
return makeURL(fName, "file");
}
public static URL makeJarURL(File fJar) {
return makeURL(fJar.getAbsolutePath(), "jar");
}
public static URL makeURL(String fName, String type) {
try {
if ("file".equals(type)) {
......@@ -910,7 +908,9 @@ public class FileManager {
if (!fName.contains("!/")) {
fName += "!/";
}
return new URL("jar:" + fName);
fName = fName.startsWith("file:") ? "jar:" + fName : "jar:file:" + fName;
URL url = new URL(fName);
return url;
} else if ("file".equals(type)) {
File aFile = new File(fName);
if (aFile.exists() && aFile.isDirectory()) {
......@@ -1226,6 +1226,134 @@ public class FileManager {
return result.toString();
}
public static String makeScriptjar(List<String> options) {
File fSetupStuff = new File(RunTime.get().fSikulixAppPath, "SetupStuff");
FileManager.resetFolder(fSetupStuff);
String target = doMakeScriptjar(options, fSetupStuff);
deleteFileOrFolder(fSetupStuff);
return target;
}
private static String doMakeScriptjar(List<String> options, File fSetupStuff) {
boolean makingScriptjarPlain = false;
RunTime runTime = RunTime.get();
File fSikulixapi = new File(runTime.fSikulixDownloadsGeneric, runTime.sSikulixapi);
File fSikulixjython = new File(runTime.fSikulixDownloadsGeneric, new File(runTime.SikuliJythonMaven).getName());
if (options.size() > 0 && "plain".equals(options.get(0))) {
makingScriptjarPlain = true;
options.remove(0);
} else {
if (!fSikulixapi.exists()) {
log(-1,"makingScriptJar: sikulixapi.jar missing. run setup first!");
return null;
}
if (!fSikulixjython.exists()) {
log(-1,"makingScriptJar: jython jar missing. run setup first!");
return null;
}
}
File scriptFile = null;
File scriptFolder = null;
File scriptFolderSikuli = null;
String scriptName = null;
String[] fileList = new String[]{null, null, null};
String[] preList = new String[]{null, null, null};
if (options.size() > 0) {
scriptFolder = new File(options.get(0));
if (!scriptFolder.exists()) {
scriptFolderSikuli = new File(scriptFolder.getAbsolutePath() + ".sikuli");
if (!scriptFolderSikuli.exists()) {
log(-1,"makingScriptJar: script folder invalid: " + scriptFolder.getAbsolutePath());
return null;
}
} else {
if (scriptFolder.getAbsolutePath().endsWith(".sikuli")) {
scriptFolderSikuli = scriptFolder;
} else {
scriptFile = new File(scriptFolder, "__run__.py");
if (!scriptFile.exists()) {
log(-1,"makingScriptJar: script file missing: " + scriptFile.getAbsolutePath());
return null;
}
}
}
} else {
log(-1,"makingScriptJar: no script file given");
return null;
}
String fpScriptJar = "sikulixjython.jar";
File fScriptSource = new File(fSetupStuff, "scriptSource");
File fScriptCompiled = new File(fSetupStuff, "scriptCompiled");
File fWorkdir = scriptFolder.getParentFile();
FileFilter skipCompiled = new FileFilter() {
@Override
public boolean accept(File entry) {
if (entry.getName().contains("$py.class")) {
return false;
}
return true;
}
};
if (null != scriptFolderSikuli) {
log(lvl, "makingScriptJar: compiling sikuli script: %s", scriptFolderSikuli);
fWorkdir = scriptFolderSikuli.getParentFile();
scriptName = scriptFolder.getName().replace(".sikuli", "");
fpScriptJar = scriptName + "_sikuli.jar";
scriptFile = new File(scriptFolderSikuli, scriptName + ".py");
if (!scriptFile.exists()) {
log(-1,"makingScriptJar: script folder invalid: " + scriptFolderSikuli.getAbsolutePath());
return null;
}
FileManager.xcopy(scriptFolderSikuli, fScriptSource, skipCompiled);
String script = "";
String prolog = "import org.sikuli.script.SikulixForJython\nfrom sikuli import *\n";
prolog += "ImagePath.addJar(\".\", \"\")\n";
prolog += "import " + scriptName + "\n";
FileManager.writeStringToFile(prolog + script, new File(fScriptSource, "__run__.py"));
script = FileManager.readFileToString(new File(fScriptSource, scriptName + ".py"));
prolog = "from sikuli import *\n";
FileManager.writeStringToFile(prolog + script, new File(fScriptSource, scriptName + ".py"));
} else {
log(lvl, "makingScriptJar: compiling plain script: %s", scriptFolder);
FileManager.xcopy(scriptFolder, fScriptSource, skipCompiled);
}
Sikulix.compileJythonFolder(fScriptSource.getAbsolutePath(), fScriptCompiled.getAbsolutePath());
FileManager.xcopy(fScriptCompiled, fSetupStuff);
FileManager.deleteFileOrFolder(fScriptSource);
FileManager.deleteFileOrFolder(fScriptCompiled);
fileList[0] = fSetupStuff.getAbsolutePath();
String[] jarsList = new String[] {null, null};
if (!makingScriptjarPlain) {
log(lvl, "makingScriptJar: adding sikulixapi and jython - takes some time", fpScriptJar);
jarsList[0] = fSikulixjython.getAbsolutePath();
jarsList[1] = fSikulixapi.getAbsolutePath();
String manifest = "Manifest-Version: 1.0\nMain-Class: org.python.util.JarRunner\n";
File fMetaInf = new File(fSetupStuff, "META-INF");
fMetaInf.mkdir();
FileManager.writeStringToFile(manifest, new File(fMetaInf, "MANIFEST.MF"));
}
String targetJar = (new File(fWorkdir, fpScriptJar)).getAbsolutePath();
if (!FileManager.buildJar(targetJar, jarsList, fileList, preList, new FileManager.JarFileFilter() {
@Override
public boolean accept(ZipEntry entry, String jarname) {
if (entry.getName().startsWith("META-INF")) {
return false;
}
return true;
}
})) {
log(-1,"makingScriptJar: problems building jar - for details see logfile");
return null;
}
log(lvl,"makingScriptJar: ended successfully: %s", targetJar);
return targetJar;
}
public static boolean packJar(String folderName, String jarName, String prefix) {
jarName = FileManager.slashify(jarName, false);
if (!jarName.endsWith(".jar")) {
......@@ -1477,9 +1605,20 @@ public class FileManager {
return null;
}
} else if ("jar".equals(scriptType)) {
log(-1, "Sorry, script projects as jar-files are not yet supported;");
//TODO try to load and run as extension
return null; // until ready
URL jarURL = makeJarURL(fScriptFolder);
scriptName = scriptName.replace("_sikuli", "");
List<String> filesInJar = RunTime.get().listFilesInJar(jarURL);
String sScriptFile = null;
for (String sFile: filesInJar) {
if (sFile.equals(scriptName + "$py.class")) {
sScriptFile = sFile;
}
}
if (null == sScriptFile) {
log(-1, "Script project %s \n has no script file %s.xxx", fScriptFolder, scriptName);
return null;
}
return new File[] {new File(sScriptFile)};
}
return content;
}
......