/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
*/
package org.sikuli.script;
import java.awt.Rectangle;
import java.net.URL;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* EXPERIMENTAL --- INTERNAL USE ONLY<br>
* is not official API --- will not be in version 2
*/
public class ImageGroup {
static RunTime runTime = RunTime.get();
private static Map<String, ImageGroup> imageGroups =
Collections.synchronizedMap(new HashMap<String, ImageGroup>());
private String name;
private URL url;
private String path;
private String subSet;
private Map<String, int[]> images = Collections.synchronizedMap(new HashMap<String, int[]>());
private boolean valid;
/**
* @return true if this group has been found and is loadable
*/
public boolean isValid() {
return valid;
}
public static ImageGroup open(String name) {
ImageGroup ig = imageGroups.get(name);
if (ig != null && ig.isValid()) {
return ig;
}
ig = new ImageGroup(name);
if (!ig.isValid()) {
ig = null;
}
return ig;
}
public static void close(ImageGroup ig) {
ig.images.clear();
//take from ImagePath and purge
}
private ImageGroup(String name) {
init(name, null);
}
private ImageGroup(String name, String subSet) {
init(name, subSet);
}
private void init(String name, String subSet) {
this.name = name;
this.path = locate(name);
url = null;
this.subSet = subSet;
valid = false;
if (path != null) {
valid = true;
url = checkURL(path);
imageGroups.put(name, this);
use(subSet);
}
}
private static String locate(String name) {
// find the given folder name on current image path
return null;
}
private static URL checkURL(String path) {
// check wether path is an URL-string
URL purl = null;
return purl;
}
public boolean use(String sub) {
if (sub == null) {
// either no sub folders or use groupname as default sub
}
// add/replace in ImagePath (purge!)
// save/load imagefacts?
return true;
}
// triggered when lastSeen is stored
protected int[] addImageFacts(Image img, Rectangle r, double score) {
int[] facts = new int[5];
facts[0] = r.x;
facts[1] = r.y;
facts[2] = r.width;
facts[3] = r.height;
facts[4] = (int) (score*100);
images.put(img.getName(), facts);
return facts;
}
public boolean loadImageFacts() {
return true;
}
public boolean saveImageFacts() {
return true;
}
}