use of org.collectionspace.chain.csp.schema.Record in project application by collectionspace.
the class RelateRead method configure.
public void configure(WebUI ui, Spec spec) {
for (Record r : spec.getAllRecords()) {
type_to_url.put(r.getID(), r.getWebURL());
servicename_to_serviceid.put(r.getServicesTenantSg(), r.getID());
}
}
use of org.collectionspace.chain.csp.schema.Record in project application by collectionspace.
the class UISchema method uiotherschema.
/**
* Create all the other weird schemas that the UI wants
* @param storage
* @param params
* @return
* @throws UIException
* @throws UnauthorizedException
*/
private JSONObject uiotherschema(UISession session, Storage storage, String params) throws UIException, UnauthorizedException {
JSONObject out = new JSONObject();
String sectionname = "";
String sectionid = params.toLowerCase();
if (schema != null) {
sectionid = schema.getID();
sectionname = schema.getWebURL();
}
try {
if (sectionid.toLowerCase().equals("recordlist")) {
JSONObject schema = new JSONObject();
JSONArray recrds = new JSONArray();
for (Record rc : this.spec.getAllRecords()) {
if (rc.isShowType("authority")) {
if (rc.isInRecordList()) {
for (Instance ins : rc.getAllInstances()) {
recrds.put(ins.getWebURL());
}
}
} else if (rc.isShowType("record") || rc.isShowType("procedure")) {
if (rc.isInRecordList()) {
recrds.put(rc.getWebURL());
}
}
}
schema.put("type", "array");
schema.put("default", recrds);
out.put(sectionname, schema);
} else if (sectionid.toLowerCase().equals("namespaces")) {
assertLoginStatus(session);
JSONObject namespaces = new JSONObject();
JSONObject namespacesProps = new JSONObject();
for (Record rc : this.spec.getAllRecords()) {
if (rc.isInRecordList()) {
if (rc.isShowType("authority")) {
JSONObject authInfoProps = new JSONObject();
int cardinal = 0;
for (Instance ins : rc.getAllInstances()) {
JSONObject instanceInfo = new JSONObject();
JSONObject instanceProps = new JSONObject();
JSONObject nptAllowed = new JSONObject();
nptAllowed.put("type", "boolean");
nptAllowed.put("default", ins.getNPTAllowed());
instanceProps.put("nptAllowed", nptAllowed);
// Preserve the order of the namespaces
JSONObject orderProp = new JSONObject();
orderProp.put("type", "integer");
orderProp.put("default", cardinal);
instanceProps.put("order", orderProp);
JSONObject workflowState = new JSONObject();
workflowState.put("type", "string");
workflowState.put("default", getWorkflowState(storage, ins));
instanceProps.put("workflowState", workflowState);
instanceInfo.put("type", "object");
instanceInfo.put("properties", instanceProps);
authInfoProps.put(ins.getWebURL(), instanceInfo);
cardinal++;
}
JSONObject authorityInfo = new JSONObject();
authorityInfo.put("type", "object");
authorityInfo.put("properties", authInfoProps);
namespacesProps.put(rc.getWebURL(), authorityInfo);
}
}
}
namespaces.put("type", "object");
namespaces.put("properties", namespacesProps);
out.put("namespaces", namespaces);
/**
*{
* "namespaces": {
* "type": "object",
* "properties": {
* "person": {
* "type": "object"
* "properties": {
* "person" : {
* "type": "object"
* "properties": {
* "nptAllowed": {
* "type": "boolean",
* "default": true
* }
* }
* },
* "persontest" : {
* "type": "object"
* "properties": {
* "nptAllowed": {
* "type": "boolean",
* "default": true
* }
* }
* }
* }
* },
* "organization": {
* "type": "object"
* "properties": {
* "organization" : {
* "type": "object"
* "properties": {
* "nptAllowed": {
* "type": "boolean",
* "default": true
* }
* }
* },
* "organizationtest" : {
* "type": "object"
* "properties": {
* "nptAllowed": {
* "type": "boolean",
* "default": true
* }
* }
* }
* }
* },
* ...
* }
* }
*}
*/
} else if (sectionid.toLowerCase().equals("recordtypes")) {
JSONObject procedures_schema = new JSONObject();
JSONObject authorities_schema = new JSONObject();
JSONObject admin_schema = new JSONObject();
JSONObject cataloging_schema = new JSONObject();
JSONObject searchAll_schema = new JSONObject();
JSONArray procedures_records = new JSONArray();
JSONArray authorities_records = new JSONArray();
JSONArray admin_records = new JSONArray();
JSONArray cataloging_records = new JSONArray();
JSONArray searchAll_records = new JSONArray();
/**
* { "procedures": { "type": "array", "default": ["loanout",
* "movement", ...] }, "vocabularies": { "type": "array",
* "default": ["person", "organization", ...] }, "cataloging": {
* "type": "array", "default": ["cataloging"] } }
*/
for (Record rc : this.spec.getAllRecords()) {
if (rc.isInRecordList()) {
if (rc.isShowType("procedure")) {
procedures_records.put(rc.getWebURL());
} else if (rc.isShowType("authority")) {
for (Instance ins : rc.getAllInstances()) {
authorities_records.put(ins.getWebURL());
}
} else if (rc.isShowType("record")) {
// FIXME Assumes that "records" are either
// procedures, authorities, or cataloging.
// Should instead have a type "cataloging"
cataloging_records.put(rc.getWebURL());
} else if (rc.isShowType("searchall")) {
searchAll_records.put(rc.getWebURL());
} else if (rc.isShowType("authorizationdata") || rc.isShowType("userdata")) {
admin_records.put(rc.getWebURL());
}
}
}
procedures_schema.put("type", "array");
procedures_schema.put("default", procedures_records);
authorities_schema.put("type", "array");
authorities_schema.put("default", authorities_records);
admin_schema.put("type", "array");
admin_schema.put("default", admin_records);
cataloging_schema.put("type", "array");
cataloging_schema.put("default", cataloging_records);
searchAll_schema.put("type", "array");
searchAll_schema.put("default", searchAll_records);
JSONObject record_types = new JSONObject();
JSONObject types_list = new JSONObject();
types_list.put("procedures", procedures_schema);
types_list.put("vocabularies", authorities_schema);
types_list.put("cataloging", cataloging_schema);
types_list.put("all", searchAll_schema);
types_list.put("administration", admin_schema);
record_types.put("type", "object");
record_types.put("properties", types_list);
out.put("recordtypes", record_types);
}
} catch (JSONException e) {
throw new UIException("Cannot generate UISpec due to JSONException", e);
}
return out;
}
use of org.collectionspace.chain.csp.schema.Record in project application by collectionspace.
the class UISpec method actualHierarchyEntry.
/**
* Create hierarchy specific output for uispec
* @param out
* @param f
* @param context
* @throws JSONException
*/
private void actualHierarchyEntry(JSONObject out, FieldSet f, UISpecRunContext context) throws JSONException {
String condition = "cspace.hierarchy.assertEquivalentContexts";
Record thisr = f.getRecord();
JSONObject cond = new JSONObject();
if (f instanceof Field) {
FieldSet fs = (FieldSet) f.getParent();
JSONObject args = new JSONObject();
args.put(fs.getID(), displayAsveryplain(fs, context));
cond.put("args", args);
cond.put("funcName", condition);
}
JSONObject ttree = new JSONObject();
actualMessageKey(ttree, thisr.getUILabelSelector(f.getID()), f.getLabel());
// This looks wrong - a single decorator is being set as the value of the
// plural decorators key, which usually holds an array of decorators.
// However, it turns out that UI is forgiving, and handles either Object or Array
JSONObject decorator = getDecorator("addClass", "hidden", null, null, f.isReadOnly());
JSONObject decorators = new JSONObject();
decorators.put(DECORATORS_KEY, decorator);
JSONObject ftree = new JSONObject();
ftree.put(thisr.getUILabelSelector(f.getID()), decorators);
JSONObject cexpander = new JSONObject();
cexpander.put("type", "fluid.renderer.condition");
cexpander.put("condition", cond);
cexpander.put("trueTree", ttree);
cexpander.put("falseTree", ftree);
actualTrueTreeSub(out, cexpander);
}
use of org.collectionspace.chain.csp.schema.Record in project application by collectionspace.
the class WebReset method reset.
private void reset(Storage storage, UIRequest request, String path) throws UIException {
// remember to log into the front end before trying to run this
JSONObject data = new JSONObject();
TTYOutputter tty = request.getTTYOutputter();
// Temporary hack to reset db
try {
data = storage.getPathsJSON("/", null);
String[] paths = (String[]) data.get("listItems");
if (!path.equals("nodelete")) {
// Delete existing records
for (String dir : paths) {
Record r = null;
log.info(dir);
if ("direct".equals(dir) || "relations".equals(dir))
continue;
try {
r = this.spec.getRecord(dir);
} catch (Exception e) {
continue;
}
if (r.isType("procedure")) {
if ("termlistitem".equals(dir) || "termlist".equals(dir))
continue;
// Nothing to do for the pseudo-records
if (r.isType("searchall")) {
continue;
}
} else if (r.isType("authority")) {
continue;
} else if (r.isType("record")) {
if (// Filter out self-renderers, etc
"hierarchy".equals(dir) || !r.isRealRecord())
continue;
log.info("S");
} else if (r.isType("authorizationdata")) {
continue;
} else if (r.isType("userdata")) {
continue;
} else {
// ignore - have no idea what it is
continue;
}
// if("place".equals(dir) || "vocab".equals(dir) || "contact".equals(dir) || "location".equals(dir) || "person".equals(dir) || "organization".equals(dir) || "taxon".equals(dir)){
// continue;
// }
// ignore authorization
// if("rolePermission".equals(dir) || "accountrole".equals(dir) || "accountroles".equals(dir) || "userperm".equals(dir)|| "permrole".equals(dir) || "permission".equals(dir) || "role".equals(dir)|| "userrole".equals(dir) || "users".equals(dir) ){
// continue;
// }
// ignore other - tho we do need to clean these up
// if("termlistitem".equals(dir) ||"termlist".equals(dir) || "reports".equals(dir) || "reporting".equals(dir) || "output".equals(dir) )
// continue;
// // ignore other - tho we do need to clean these up
// if("hierarchy".equals(dir) || "dimension".equals(dir) ||"structureddate".equals(dir) ||"blobs".equals(dir) ||"relations".equals(dir) || "direct".equals(dir) || "id".equals(dir) )
// continue;
log.info("Deleteing data associated with : " + dir);
tty.line("Deleteing data associated with : " + dir);
JSONObject data2 = storage.getPathsJSON(dir, null);
String[] paths2 = (String[]) data2.get("listItems");
for (int i = 0; i < paths2.length; i++) {
tty.line("path : " + dir + "/" + paths2[i]);
try {
storage.deleteJSON(dir + "/" + paths2[i]);
} catch (UnimplementedException e) {
tty.line("UnimplementedException" + e);
tty.line("ux");
} catch (UnderlyingStorageException e) {
tty.line("UnderlyingStorageEception" + e);
}
tty.line("ok");
tty.flush();
}
}
}
log.info("Creating records and procedures: this might take some time, go get a cup of tea and be patient");
tty.line("Creating records and procedures: this might take some time, go get a cup of tea and be patient");
// Create records anew
tty.line("Create records anew");
String schedule = getResource("reset.txt");
for (String line : schedule.split("\n")) {
String[] parts = line.split(" +", 2);
if (!parts[0].equals("")) {
tty.line("Creating " + parts[0]);
log.info("Creating " + parts[0]);
storage.autocreateJSON(parts[0], getJSONResource(parts[1]), null);
tty.flush();
}
}
log.info("Delete existing vocab/auth entries");
tty.line("Delete existing vocab/auth entries");
// Delete existing vocab entries
JSONObject myjs = new JSONObject();
myjs.put("pageSize", "10");
myjs.put("pageNum", "0");
for (String dir : paths) {
try {
if (this.spec.hasRecord(dir)) {
if (dir.equalsIgnoreCase("vocab") && path.equalsIgnoreCase("keepVocabs")) {
// don't reset the term lists
continue;
}
Record r = this.spec.getRecord(dir);
if (r.isType("authority")) {
for (Instance n : r.getAllInstances()) {
String url = r.getID() + "/" + n.getTitleRef();
try {
storage.getPathsJSON(url, new JSONObject()).toString();
} catch (UnderlyingStorageException x) {
JSONObject fields = new JSONObject("{'displayName':'" + n.getTitle() + "','shortIdentifier':'" + n.getWebURL() + "'}");
String base = r.getID();
storage.autocreateJSON(base, fields, null);
log.info("Instance " + n.getID() + " Created");
tty.line("Instance " + n.getID() + " Created");
}
deletall(n, r, url, "Deleting " + url, storage, data, tty, myjs);
}
}
}
} catch (Exception e) {
log.info("that was weird but probably not an issue " + e.getMessage());
}
}
log.info("Creating Dummy data");
tty.line("Creating Dummy data");
tty.flush();
// Create vocab entries
String names = getResource("names.txt");
int i = 0;
for (String nextName : names.split("\n")) {
i++;
JSONObject entry = createTrivialAuthItem(PERSON_TERMLIST_ELEMENT, nextName);
storage.autocreateJSON("/person/person", entry, null);
tty.line("Created Person " + entry);
log.info("Created Person " + entry);
tty.flush();
if (quick && i > 20)
break;
}
// Create vocab entries
String orgs = getResource("orgs.txt");
i = 0;
for (String nextName : orgs.split("\n")) {
i++;
JSONObject entry = createTrivialAuthItem(ORG_TERMLIST_ELEMENT, nextName);
storage.autocreateJSON("/organization/organization", entry, null);
tty.line("Created Organisation " + nextName);
log.info("Created Organisation " + nextName);
tty.flush();
if (quick && i > 20)
break;
}
tty.line("done");
log.info("done");
} catch (ExistException e) {
log.info("ExistException " + e.getLocalizedMessage());
tty.line("ExistException " + e.getLocalizedMessage());
throw new UIException("Existence problem", e);
} catch (UnimplementedException e) {
log.info("UnimplementedException " + e.getLocalizedMessage());
tty.line("UnimplementedException " + e.getLocalizedMessage());
throw new UIException("Unimplemented ", e);
} catch (UnderlyingStorageException x) {
log.info("UnderlyingStorageException " + x.getLocalizedMessage());
tty.line("UnderlyingStorageException " + x.getLocalizedMessage());
throw new UIException("Problem storing" + x.getLocalizedMessage(), x.getStatus(), x.getUrl(), x);
} catch (JSONException e) {
log.info("JSONException " + e.getLocalizedMessage());
tty.line("JSONException " + e.getLocalizedMessage());
throw new UIException("Invalid JSON", e);
} catch (IOException e) {
log.info("IOException " + e.getLocalizedMessage());
tty.line("IOException " + e.getLocalizedMessage());
throw new UIException("IOException", e);
}
}
use of org.collectionspace.chain.csp.schema.Record in project application by collectionspace.
the class WebReset method initialiseAll.
/*
* Vocab and Auth initialization is now done when the Services layer starts up -see JIRA issue DRYD-177
*/
@Deprecated
private boolean initialiseAll(Storage storage, UIRequest request, String path, boolean modifyResponse) throws UIException {
StringBuffer responseMessage = new StringBuffer();
boolean initializationFailed = false;
boolean initializationUnknown = false;
try {
logInitMessage(responseMessage, "Initializing vocab/auth entries...", modifyResponse);
JSONObject myjs = new JSONObject();
myjs.put("pageSize", "10");
myjs.put("pageNum", "0");
JSONObject data = storage.getPathsJSON("/", null);
String[] paths = (String[]) data.get("listItems");
for (String dir : paths) {
try {
if (this.spec.hasRecord(dir)) {
Record record = this.spec.getRecord(dir);
if (record.isType("authority") == true) {
for (Instance instance : record.getAllInstances()) {
if (instance.getCreateUnreferenced() || isInstanceReferenced(instance)) {
avi = new AuthoritiesVocabulariesInitialize(instance, populate, modifyResponse);
Option[] allOpts = instance.getAllOptions();
boolean creatingTerm = false;
try {
if (avi.createIfMissingAuthority(storage, responseMessage, record, instance) == -1) {
log.warn(String.format("The currently authenticated user does not have sufficient permission to determine if the '%s' authority/term-list is properly initialized.", instance.getID()));
// since the logged in user doesn't have the correct perms, we can't verify that the authorities and term lists have been properly initialized
initializationUnknown = true;
} else {
//
// Create the missing items.
//
creatingTerm = true;
avi.fillVocab(storage, record, instance, responseMessage, allOpts, true);
}
} catch (UnderlyingStorageException e) {
if (e.getStatus() == HttpStatus.SC_CONFLICT) {
// This means the authority/vocabulary instance already exists in the backend, so move on to the next instance.
log.warn(String.format("A short ID for the authority/vocabulary instance '%s' already exists.", instance.getID()));
// Not a fatal error.
continue;
} else {
throw e;
}
} catch (Exception e) {
if (avi.success() == false) {
initializationFailed = true;
}
throw e;
}
} else {
logInitMessage(responseMessage, "Instance " + instance.getID() + " is defined by not referenced.", modifyResponse);
}
}
}
}
} catch (UnderlyingStorageException e) {
//
if (e.getCause() instanceof ConnectionException) {
if (initializationFailed == true) {
modifyResponse = true;
if (e.getStatus() == HttpStatus.SC_UNAUTHORIZED || e.getStatus() == HttpStatus.SC_FORBIDDEN) {
logInitMessage(responseMessage, "\nSummary:\n\t*** ERROR *** CollectionSpace has not been properly initialized: The CollectionSpace administrator needs to login to the correct tenant and initialize the default term lists and authorities.\n\n", modifyResponse);
} else {
logInitMessage(responseMessage, "\nSummary:\n\t*** ERROR *** CollectionSpace has not been properly initialized: Ask the CollectionSpace administrator to login to the correct tenant and initialize the default term lists and authorities.\n\n", modifyResponse);
}
} else if (initializationUnknown == true) {
log.warn("The currently logged in user does not have the correct permissions to determin whether or not the default authorities and term lists have been properly initialized.");
} else {
// Should never get here unless we've got a bug in our code
throw e;
}
}
logException(e, responseMessage, modifyResponse);
// no need to continue if the user hasn't authenticated or has incorrect permissions
break;
}
}
} catch (ExistException e) {
logInitMessage(responseMessage, "ExistException " + e.getLocalizedMessage(), modifyResponse);
throw new UIException("Existence problem", e);
} catch (UnimplementedException e) {
logInitMessage(responseMessage, "UnimplementedException " + e.getLocalizedMessage(), modifyResponse);
throw new UIException("Unimplemented ", e);
} catch (UnderlyingStorageException x) {
if (x.getStatus() == HttpStatus.SC_UNAUTHORIZED) {
initializationFailed = true;
logInitMessage(responseMessage, "\n*** ERROR *** You need to be logged in to the correct tenant with the proper credentials before attempting to initialize the default term lists and authorities.\n", modifyResponse);
logException(x, responseMessage, modifyResponse);
} else {
logInitMessage(responseMessage, "UnderlyingStorageException " + x.getLocalizedMessage(), modifyResponse);
throw new UIException("Problem storing:" + x.getLocalizedMessage(), x.getStatus(), x.getUrl(), x);
}
} catch (JSONException e) {
logInitMessage(responseMessage, "JSONException " + e.getLocalizedMessage(), modifyResponse);
throw new UIException("Invalid JSON", e);
}
//
if (modifyResponse == true && request != null) {
TTYOutputter tty = request.getTTYOutputter();
tty.line(responseMessage.toString());
}
// report success if we didn't see a failure
return !initializationFailed;
}
Aggregations