Files
dev/plugins/Inventory.java
2018-01-19 10:56:53 +01:00

149 lines
5.3 KiB
Java
Executable File

/*
* Copyright (c) 2014 Paul Scherrer Institute. All rights reserved.
*/
import ch.psi.pshell.core.JsonSerializer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.jackson.JacksonFeature;
/**
*
*/
public class Inventory {
public static <T> T inventoryRequest(String url, Map attributes, Class<T> type) throws IOException {
String json = JsonSerializer.encode(attributes);
Client client = ClientBuilder.newClient(new ClientConfig().register(JacksonFeature.class));
try {
WebTarget resource = client.target(url);
Response r = resource.request().accept(MediaType.TEXT_HTML).post(Entity.json(json));
json = r.readEntity(String.class);
if (r.getStatus() != Response.Status.OK.getStatusCode()) {
throw new IOException("Inventory returned error: " + json);
}
Map ret = (Map) JsonSerializer.decode(json, Map.class);
return (T) ret.get("d");
} finally {
client.close();
}
}
public static String findPartidByHoly(String holy_name, String type) throws IOException {
if (type == null) {
type = "DSCR";
}
Map query = new HashMap();
Map qn = new HashMap();
Map qt = new HashMap();
qn.put("Field", "Holy List Name");
qn.put("Operator", "Is");
qn.put("Value", holy_name);
qt.put("Field", "Type");
qt.put("Operator", "Is");
qt.put("Value", type);
query.put("query", Arrays.asList(new Map[]{qn, qt}));
query.put("columns", Arrays.asList(new String[]{"Label"}));
Map attr = new HashMap();
attr.put("search", query);
Map ret = (Map) inventoryRequest("https://inventory.psi.ch/DataAccess.asmx/FindObjects", attr, Map.class);
try {
return (String) ((List) (((List) ret.get("Rows")).get(0))).get(0);
} catch (Exception ex) {
return null;
}
}
public static List findAllByType(String type, String column) throws IOException {
if (type == null) {
type = "DSCR";
}
if (column == null) {
column = "Holy List Name";
}
Map query = new HashMap();
Map q = new HashMap();
q.put("Field", "Type");
q.put("Operator", "Is");
q.put("Value", type);
query.put("query", Arrays.asList(new Map[]{q}));
query.put("columns", Arrays.asList(new String[]{"Label"}));
Map attr = new HashMap();
attr.put("search", query);
Map r = (Map) inventoryRequest("https://inventory.psi.ch/DataAccess.asmx/FindObjects", attr, Map.class);
List rows = (List) (r.get("Rows"));
List ret = new ArrayList();
for (Object list : rows) {
ret.add(((List) list).get(0));
}
return ret;
}
public static List<Map> getPartAttributesFromInventory(String part_label, String holy_name) throws IOException {
if ((holy_name != null) && !holy_name.isEmpty()) {
part_label = findPartidByHoly(holy_name, "DSCR");
if ((part_label == null) || part_label.isEmpty()) {
throw new IOException("Could not find inventory part for: " + holy_name);
}
}
Map map = new HashMap();
map.put("psiLabel", part_label);
return (List) inventoryRequest("https://inventory.psi.ch/DataAccess.asmx/GetPartAttributes", map, List.class);
}
public static List<Double> getCalibFromInvetory(String part_label, String holy_name) throws IOException {
double horizontal_dist = 0.0;
double vertical_dist = 0.0;
double horizontal_tilt = 0.0;
double vertical_tilt = 0.0;
List<Map> attributes = getPartAttributesFromInventory(part_label, holy_name);
for (Map a : attributes) {
String name = (String) a.get("Name");
Double val = 0.0;
try {
val = Double.valueOf(a.get("Value").toString());
} catch (Exception ex) {
}
switch (name) {
case "Crystal angle in x (e-beam system) [deg]":
horizontal_tilt = val;
break;
case "Crystal angle in y (e-beam system) [deg]":
vertical_tilt = val;
break;
case "Mark distance in x (e-beam system) [mm]":
horizontal_dist = val;
break;
case "Mark distance in y (e-beam system) [mm]":
vertical_dist = val;
break;
}
}
return Arrays.asList(new Double[]{horizontal_dist, vertical_dist, horizontal_tilt, vertical_tilt});
}
public static void main(String[] args) throws IOException {
System.out.println(getCalibFromInvetory("SINEG01-DSCR190", "SINEG01-DSCR190"));
System.out.println(findAllByType(null, null));
}
}