Search in sources :

Example 1 with CallableSubstanceI5Query

use of ambit2.db.processors.CallableSubstanceI5Query in project ambit-mirror by ideaconsult.

the class SubstanceResource method post.

@Override
protected Representation post(Representation entity, Variant variant) throws ResourceException {
    if ((entity == null) || !entity.isAvailable())
        throw new ResourceException(Status.CLIENT_ERROR_BAD_REQUEST, "Empty content");
    if (entity.getMediaType() != null)
        if (MediaType.MULTIPART_FORM_DATA.getName().equals(entity.getMediaType().getName())) {
            DiskFileItemFactory factory = new DiskFileItemFactory();
            RestletFileUpload upload = new RestletFileUpload(factory);
            try {
                List<FileItem> items = upload.parseRequest(getRequest());
                String token = getToken();
                QASettings qa = new QASettings();
                // sets enabled to false and clears all flags
                qa.clear();
                boolean clearMeasurements = false;
                boolean clearComposition = false;
                for (FileItem file : items) {
                    if (file.isFormField()) {
                        if ("qaenabled".equals(file.getFieldName()))
                            try {
                                if ("on".equals(file.getString()))
                                    qa.setEnabled(true);
                                if ("yes".equals(file.getString()))
                                    qa.setEnabled(true);
                                if ("checked".equals(file.getString()))
                                    qa.setEnabled(true);
                            } catch (Exception x) {
                                qa.setEnabled(true);
                            }
                        else if ("clearMeasurements".equals(file.getFieldName())) {
                            try {
                                clearMeasurements = false;
                                String cm = file.getString();
                                if ("on".equals(cm))
                                    clearMeasurements = true;
                                else if ("yes".equals(cm))
                                    clearMeasurements = true;
                                else if ("checked".equals(cm))
                                    clearMeasurements = true;
                            } catch (Exception x) {
                                clearMeasurements = false;
                            }
                        } else if ("clearComposition".equals(file.getFieldName())) {
                            try {
                                clearComposition = false;
                                String cm = file.getString();
                                if ("on".equals(cm))
                                    clearComposition = true;
                                else if ("yes".equals(cm))
                                    clearComposition = true;
                                else if ("checked".equals(cm))
                                    clearComposition = true;
                            } catch (Exception x) {
                                clearComposition = false;
                            }
                        } else
                            for (IQASettings.qa_field f : IQASettings.qa_field.values()) if (f.name().equals(file.getFieldName()))
                                try {
                                    String value = file.getString("UTF-8");
                                    f.addOption(qa, "null".equals(value) ? null : value == null ? null : value.toString());
                                } catch (Exception x) {
                                }
                    } else {
                        String ext = file.getName().toLowerCase().trim();
                        if ("".equals(ext) || ext.endsWith(".i5z") || ext.endsWith(".i6z") || ext.endsWith(".csv") || ext.endsWith(".rdf") || ext.endsWith(".ttl") || ext.endsWith(".json") || ext.endsWith(".xlsx") || ext.endsWith(".xls")) {
                        } else
                            throw new ResourceException(Status.CLIENT_ERROR_BAD_REQUEST, "Unsupported format " + ext);
                    }
                }
                CallableSubstanceImporter<String> callable = new CallableSubstanceImporter<String>(items, CallableFileUpload.field_files, CallableFileUpload.field_config, getRootRef(), getContext(), new SubstanceURIReporter(getRequest().getRootRef()), new DatasetURIReporter(getRequest().getRootRef()), token, getRequest().getResourceRef().toString(), getClientInfo());
                callable.setClearComposition(clearComposition);
                callable.setClearMeasurements(clearMeasurements);
                callable.setQASettings(qa);
                ITask<Reference, Object> task = ((ITaskApplication) getApplication()).addTask("Substance import", callable, getRequest().getRootRef(), token);
                ITaskStorage storage = ((ITaskApplication) getApplication()).getTaskStorage();
                FactoryTaskConvertor<Object> tc = new FactoryTaskConvertor<Object>(storage);
                task.update();
                getResponse().setStatus(task.isDone() ? Status.SUCCESS_OK : Status.SUCCESS_ACCEPTED);
                return tc.createTaskRepresentation(task.getUuid(), variant, getRequest(), getResponse(), null);
            } catch (ResourceException x) {
                throw x;
            } catch (Exception x) {
                throw new ResourceException(Status.CLIENT_ERROR_BAD_REQUEST, x);
            }
        } else if (MediaType.APPLICATION_WWW_FORM.getName().equals(entity.getMediaType().getName())) {
            /*
				 * web form to update substances from IUCLID5 server Expected web form fields :
				 * substance: UUID or query URL type : UUID or query or URL (ambit substance
				 * URL) qa options query : one of {@link QueryToolClient.PredefinedQuery} query
				 * parameters: depend on the query type iuclid5 server; credentials - optional,
				 * use preconfigured if not submitted [(option,UUID), (uuid,ZZZZZZZZZZ),
				 * (extidtype,CompTox), (extidvalue,Ambit Transfer), (i5server,null),
				 * (i5user,null), (i5pass,null)]
				 */
            Form form = new Form(entity);
            String token = getToken();
            CallableSubstanceI5Query<String> callable = new CallableSubstanceI5Query<String>(getRootRef(), form, getContext(), new SubstanceURIReporter(getRequest().getRootRef()), new DatasetURIReporter(getRequest().getRootRef()), token, getRequest().getResourceRef().toString(), getClientInfo());
            ITask<Reference, Object> task = ((ITaskApplication) getApplication()).addTask("Retrieve substance from IUCLID server", callable, getRequest().getRootRef(), token);
            ITaskStorage storage = ((ITaskApplication) getApplication()).getTaskStorage();
            FactoryTaskConvertor<Object> tc = new FactoryTaskConvertor<Object>(storage);
            task.update();
            getResponse().setStatus(task.isDone() ? Status.SUCCESS_OK : Status.SUCCESS_ACCEPTED);
            return tc.createTaskRepresentation(task.getUuid(), variant, getRequest(), getResponse(), null);
        }
    throw new ResourceException(Status.CLIENT_ERROR_UNSUPPORTED_MEDIA_TYPE);
}
Also used : ITask(net.idea.restnet.i.task.ITask) RestletFileUpload(org.restlet.ext.fileupload.RestletFileUpload) Form(org.restlet.data.Form) ITaskApplication(net.idea.restnet.i.task.ITaskApplication) FactoryTaskConvertor(ambit2.rest.task.FactoryTaskConvertor) ResourceException(org.restlet.resource.ResourceException) List(java.util.List) ArrayList(java.util.ArrayList) ITaskStorage(net.idea.restnet.i.task.ITaskStorage) Reference(org.restlet.data.Reference) QASettings(net.idea.i5.io.QASettings) IQASettings(net.idea.i5.io.IQASettings) DiskFileItemFactory(org.apache.commons.fileupload.disk.DiskFileItemFactory) IQASettings(net.idea.i5.io.IQASettings) AmbitException(net.idea.modbcum.i.exceptions.AmbitException) ResourceException(org.restlet.resource.ResourceException) PatternSyntaxException(java.util.regex.PatternSyntaxException) SQLException(java.sql.SQLException) ProcessorException(ambit2.base.processors.ProcessorException) FileItem(org.apache.commons.fileupload.FileItem) CallableSubstanceI5Query(ambit2.db.processors.CallableSubstanceI5Query) DatasetURIReporter(ambit2.rest.dataset.DatasetURIReporter)

Aggregations

ProcessorException (ambit2.base.processors.ProcessorException)1 CallableSubstanceI5Query (ambit2.db.processors.CallableSubstanceI5Query)1 DatasetURIReporter (ambit2.rest.dataset.DatasetURIReporter)1 FactoryTaskConvertor (ambit2.rest.task.FactoryTaskConvertor)1 SQLException (java.sql.SQLException)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 PatternSyntaxException (java.util.regex.PatternSyntaxException)1 IQASettings (net.idea.i5.io.IQASettings)1 QASettings (net.idea.i5.io.QASettings)1 AmbitException (net.idea.modbcum.i.exceptions.AmbitException)1 ITask (net.idea.restnet.i.task.ITask)1 ITaskApplication (net.idea.restnet.i.task.ITaskApplication)1 ITaskStorage (net.idea.restnet.i.task.ITaskStorage)1 FileItem (org.apache.commons.fileupload.FileItem)1 DiskFileItemFactory (org.apache.commons.fileupload.disk.DiskFileItemFactory)1 Form (org.restlet.data.Form)1 Reference (org.restlet.data.Reference)1 RestletFileUpload (org.restlet.ext.fileupload.RestletFileUpload)1 ResourceException (org.restlet.resource.ResourceException)1