/** * {@inheritDoc} * * @return */ @Override @Put public Representation put(Representation entity) { authenticate(); Representation representation = null; try { JaxbObject<Sample> jo = new JaxbObject<>(); String text = entity.getText(); Sample o = null; try { o = (Sample) XmlTools.unMarshal(jo, new Sample(), text); } catch (SAXException ex) { throw new ResourceException(Status.CLIENT_ERROR_UNPROCESSABLE_ENTITY, ex); } SampleService service = BeanFactory.getSampleServiceBean(); Sample sample = testIfNull(service.findByID(o.getSampleId())); sample.givesPermission(registration); String anonymizedName = o.getAnonymizedName(); String individualName = o.getIndividualName(); Integer swAccession = o.getSwAccession(); String name = o.getName(); String title = o.getTitle(); String alias = o.getAlias(); String description = o.getDescription(); String type = o.getType(); String tags = o.getTags(); String adapters = o.getAdapters(); String regions = o.getRegions(); Integer expectedNumRuns = o.getExpectedNumRuns(); Integer expectedNumSpots = o.getExpectedNumSpots(); Integer expectedNumReads = o.getExpectedNumReads(); Boolean skip = o.getSkip(); Boolean isSelected = o.getIsSelected(); Boolean isHasFile = o.getIsHasFile(); Integer countFile = o.getCountFile(); if (null != anonymizedName) sample.setAnonymizedName(anonymizedName); if (null != individualName) sample.setIndividualName(individualName); if (null != swAccession) sample.setSwAccession(swAccession); if (null != name) sample.setName(name); if (null != title) sample.setTitle(title); if (null != alias) sample.setAlias(alias); if (null != description) sample.setDescription(description); if (null != type) sample.setType(type); if (null != tags) sample.setTags(tags); if (null != adapters) sample.setAdapters(adapters); if (null != regions) sample.setRegions(regions); if (null != expectedNumRuns) sample.setExpectedNumRuns(expectedNumRuns); if (null != expectedNumSpots) sample.setExpectedNumSpots(expectedNumSpots); if (null != expectedNumReads) sample.setExpectedNumReads(expectedNumReads); if (null != skip) sample.setSkip(skip); if (null != isSelected) sample.setIsSelected(isSelected); if (null != isHasFile) sample.setIsHasFile(isHasFile); if (null != countFile) sample.setCountFile(countFile); if (null != o.getSampleAttributes()) { // SEQWARE-1577 - AttributeAnnotator cascades deletes when annotating SampleIDResource.mergeAttributes( sample.getSampleAttributes(), o.getSampleAttributes(), sample); } if (null != o.getParents()) { SampleService ss = BeanFactory.getSampleServiceBean(); Set<Sample> parents = new HashSet<>(sample.getParents()); for (Sample s : o.getParents()) { parents.add(ss.findByID(s.getSampleId())); } sample.setParents(parents); } if (null != o.getChildren()) { SampleService ss = BeanFactory.getSampleServiceBean(); Set<Sample> children = new HashSet<>(sample.getChildren()); for (Sample s : o.getChildren()) { children.add(ss.findByID(s.getSampleId())); } sample.setChildren(children); } service.update(sample); // persist object Hibernate3DtoCopier copier = new Hibernate3DtoCopier(); Sample detachedSample = copier.hibernate2dto(Sample.class, sample); Document line = XmlTools.marshalToDocument(jo, detachedSample); getResponse().setEntity(XmlTools.getRepresentation(line)); getResponse() .setLocationRef( getRequest().getRootRef() + "/samples/" + detachedSample.getSwAccession()); getResponse().setStatus(Status.SUCCESS_CREATED); } catch (SecurityException e) { getResponse().setStatus(Status.CLIENT_ERROR_FORBIDDEN, e); } catch (Exception e) { e.printStackTrace(); getResponse().setStatus(Status.SERVER_ERROR_INTERNAL, e); } return representation; }