private String uploadArtifact(MavenMetaData metadata, InputStream content) throws MavenRepositoryException { String uuid = null; if (content == null) { throw new MavenRepositoryException( Messages.i18n.format("maven.resource.upload.no.content")); // $NON-NLS-1$ } String fileName = metadata.getFileName(); PersistenceManager persistenceManager = PersistenceFactory.newInstance(); // We need to query firstly to check if there is an existing item. If // there is an existing item, then it would be updated // Adding the criterias and parameters List<String> criteria = new ArrayList<String>(); List<Object> parameters = new ArrayList<Object>(); criteria.add("@maven.artifactId = ?"); // $NON-NLS-1$ criteria.add("@maven.groupId = ?"); // $NON-NLS-1$ criteria.add("@maven.type = ?"); // $NON-NLS-1$ parameters.add(metadata.getArtifactId()); parameters.add(metadata.getGroupId()); if (StringUtils.isNotBlank(metadata.getParentType())) { parameters.add(metadata.getParentType()); } else { parameters.add(metadata.getType()); } if (StringUtils.isNotBlank(metadata.getVersion())) { criteria.add("@maven.version = ?"); // $NON-NLS-1$ parameters.add(metadata.getVersion()); } else { criteria.add("xp2:not(@maven.version)"); // $NON-NLS-1$ } if (StringUtils.isNotBlank(metadata.getParentFileName())) { criteria.add("@name = ?"); // $NON-NLS-1$ parameters.add(metadata.getParentFileName()); } if (StringUtils.isNotBlank(metadata.getSnapshotId())) { criteria.add("@maven.snapshot.id = ?"); // $NON-NLS-1$ parameters.add(metadata.getSnapshotId()); } else { criteria.add("xp2:not(@maven.snapshot.id)"); // $NON-NLS-1$ } ArtifactSet artifactSet = null; BaseArtifactType baseArtifact = null; try { // Query the previous criterias artifactSet = query(criteria, parameters); if (artifactSet.size() >= 1) { // Found some content! baseArtifact = artifactSet.iterator().next(); } } catch (SrampAtomException e) { throw new MavenRepositoryException( Messages.i18n.format("maven.resource.upload.sramp.query.error", metadata.toString()), e); //$NON-NLS-1$ } finally { if (artifactSet != null) { artifactSet.close(); } } if (MavenFileExtensionEnum.value(metadata.getType()) != null) { if (baseArtifact != null) { boolean update = false; ArtifactType artifactType = ArtifactType.valueOf(baseArtifact.getArtifactType()); if (metadata.getType().equals(MavenFileExtensionEnum.HASH_MD5.getExtension()) || metadata.getType().equals(MavenFileExtensionEnum.HASH_SHA1.getExtension())) { String content_value = ""; // $NON-NLS-1$ try { content_value = IOUtils.toString(content); } catch (IOException e1) { throw new MavenRepositoryException( Messages.i18n.format("maven.resource.upload.sramp.error", metadata.toString()), e1); //$NON-NLS-1$ } if (StringUtils.isNotBlank(content_value)) { if (metadata.getType().equals(MavenFileExtensionEnum.HASH_MD5.getExtension())) { SrampModelUtils.setCustomProperty( baseArtifact, JavaModel.PROP_MAVEN_HASH_MD5, content_value); update = true; } else if (metadata.getType().equals(MavenFileExtensionEnum.HASH_SHA1.getExtension())) { SrampModelUtils.setCustomProperty( baseArtifact, JavaModel.PROP_MAVEN_HASH_SHA1, content_value); update = true; } if (update) { try { persistenceManager.updateArtifact(baseArtifact, artifactType); } catch (SrampException e) { throw new MavenRepositoryException( Messages.i18n.format("maven.resource.upload.sramp.error", metadata.toString()), e); //$NON-NLS-1$ } } } } else { try { persistenceManager.updateArtifactContent(baseArtifact.getUuid(), artifactType, content); } catch (SrampException e) { throw new MavenRepositoryException( Messages.i18n.format("maven.resource.upload.sramp.error", metadata.toString()), e); //$NON-NLS-1$ } } } } else { BaseArtifactType persisted = null; // If there is an existing artifact in s-ramp it would be updaded // with the new content if (baseArtifact != null) { if (metadata.isSnapshotVersion() || metadata.getFileName().equals("maven-metadata.xml")) { // $NON-NLS-1$ ArtifactType artifactType = ArtifactType.valueOf(baseArtifact); try { persistenceManager.updateArtifactContent(baseArtifact.getUuid(), artifactType, content); } catch (SrampException e) { throw new MavenRepositoryException( Messages.i18n.format( "maven.resource.upload.sramp.update.content.error", //$NON-NLS-1$ baseArtifact.getUuid()), e); } persisted = baseArtifact; } else { throw new MavenRepositoryException( Messages.i18n.format( "maven.resource.upload.sramp.release.artifact.exist", //$NON-NLS-1$ metadata.getFullName())); } } else { // we need to create a new artifact in s-ramp and persist the // content ArtifactType artifactType = determineArtifactType(fileName); BaseArtifactType baseArtifactType = artifactType.newArtifactInstance(); try { persisted = persistenceManager.persistArtifact(baseArtifactType, content); } catch (SrampException e1) { throw new MavenRepositoryException( Messages.i18n.format("maven.resource.upload.sramp.new.content.error"), e1); //$NON-NLS-1$ } } // Store the metadata to the persisted artifact SrampModelUtils.setCustomProperty( persisted, JavaModel.PROP_MAVEN_GROUP_ID, metadata.getGroupId()); SrampModelUtils.setCustomProperty( persisted, JavaModel.PROP_MAVEN_ARTIFACT_ID, metadata.getArtifactId()); SrampModelUtils.setCustomProperty( persisted, JavaModel.PROP_MAVEN_VERSION, metadata.getVersion()); if (StringUtils.isNotBlank(metadata.getClassifier())) { SrampModelUtils.setCustomProperty( persisted, JavaModel.PROP_MAVEN_CLASSIFIER, metadata.getClassifier()); } if (StringUtils.isNotBlank(metadata.getType())) { SrampModelUtils.setCustomProperty(persisted, JavaModel.PROP_MAVEN_TYPE, metadata.getType()); } if (StringUtils.isNotBlank(metadata.getSnapshotId())) { SrampModelUtils.setCustomProperty( persisted, JavaModel.PROP_MAVEN_SNAPSHOT_ID, metadata.getSnapshotId()); } try { // Persist the content size, because it will be required when // reading persisted .getOtherAttributes() .put(SrampConstants.SRAMP_CONTENT_SIZE_QNAME, content.available() + ""); // $NON-NLS-1$ } catch (IOException e) { logger.error(""); // $NON-NLS-1$ } persisted.setName(metadata.getFileName()); ArtifactType artifactType = ArtifactType.valueOf(persisted); try { persistenceManager.updateArtifact(persisted, artifactType); } catch (SrampException e) { throw new MavenRepositoryException( Messages.i18n.format( "maven.resource.upload.sramp.update.content.metadata.error", //$NON-NLS-1$ persisted.getUuid()), e); } uuid = persisted.getUuid(); } return uuid; }
private MavenArtifactWrapper getArtifactContent(MavenMetaData metadata) throws MavenRepositoryException { // List of criterias and the parameters associated List<String> criteria = new ArrayList<String>(); List<Object> parameters = new ArrayList<Object>(); criteria.add("@maven.artifactId = ?"); // $NON-NLS-1$ criteria.add("@maven.groupId = ?"); // $NON-NLS-1$ criteria.add("@maven.type = ?"); // $NON-NLS-1$ parameters.add(metadata.getArtifactId()); parameters.add(metadata.getGroupId()); // If there is a parent type (in case of sha1 or md5, it is passed as // parameter if (StringUtils.isNotBlank(metadata.getParentType())) { parameters.add(metadata.getParentType()); } else { parameters.add(metadata.getType()); } // Not always it is passed the maven version. This is the case when it // is requested a file (normally maven-metadata.xml) that is stored in // the artifact subfolder if (StringUtils.isNotBlank(metadata.getVersion())) { criteria.add("@maven.version = ?"); // $NON-NLS-1$ parameters.add(metadata.getVersion()); } // If it is included a classfier it is added as parameter. if (StringUtils.isNotBlank(metadata.getClassifier())) { criteria.add("@maven.classifier = ?"); // $NON-NLS-1$ parameters.add(metadata.getClassifier()); } else { criteria.add("xp2:not(@maven.classifier)"); // $NON-NLS-1$ } if (StringUtils.isNotBlank(metadata.getSnapshotId())) { criteria.add("@maven.snapshot.id = ?"); // $NON-NLS-1$ parameters.add(metadata.getSnapshotId()); } else { criteria.add("xp2:not(@maven.snapshot.id)"); // $NON-NLS-1$ } ArtifactSet artifactSet = null; BaseArtifactType baseArtifact = null; try { // query based on the previous criterias artifactSet = query(criteria, parameters); if (artifactSet.size() >= 1) { // Found some content! baseArtifact = artifactSet.iterator().next(); } } catch (SrampAtomException e) { throw new MavenRepositoryException(Messages.i18n.format(""), e); // $NON-NLS-1$ } finally { if (artifactSet != null) { artifactSet.close(); } } // If the artifact returned is not null, then the content will be // retrieved if (baseArtifact != null) { PersistenceManager persistenceManager = PersistenceFactory.newInstance(); final InputStream artifactContent; ArtifactType artifactType = ArtifactType.valueOf(baseArtifact.getArtifactType()); Date lastModifiedDate = null; if (baseArtifact.getLastModifiedTimestamp() != null) { lastModifiedDate = baseArtifact.getLastModifiedTimestamp().toGregorianCalendar().getTime(); } int contentLength = -1; MavenFileExtensionEnum ext = MavenFileExtensionEnum.value(metadata.getType()); if (ext != null && StringUtils.isNotBlank(ext.getCustomProperty())) { // we need to set the input stream with the value of the custom // property String content = SrampModelUtils.getCustomProperty(baseArtifact, ext.getCustomProperty()); if (StringUtils.isNotBlank(content)) { artifactContent = new ByteArrayInputStream(content.getBytes()); contentLength = content.length(); } else { logger.info( Messages.i18n.format( "maven.resource.get.subcontent.not.found", baseArtifact.getUuid(), ext.getCustomProperty())); // $NON-NLS-1$ return null; } } else { // we need to set the input stream with the artifact content try { artifactContent = persistenceManager.getArtifactContent(baseArtifact.getUuid(), artifactType); } catch (SrampException e) { logger.error( Messages.i18n.format("maven.resource.get.content.error", baseArtifact.getUuid()), e); //$NON-NLS-1$ throw new MavenRepositoryException( Messages.i18n.format( "maven.resource.get.content.error", //$NON-NLS-1$ baseArtifact.getUuid()), e); } String contentSize = baseArtifact.getOtherAttributes().get(SrampConstants.SRAMP_CONTENT_SIZE_QNAME); if (StringUtils.isNotBlank(contentSize)) { contentLength = Integer.parseInt(contentSize); } } MavenArtifactWrapper wrapper = new MavenArtifactWrapper( artifactContent, contentLength, lastModifiedDate, metadata.getFileName(), artifactType.getMimeType()); return wrapper; } else { logger.error( Messages.i18n.format("maven.resource.item.null", metadata.toString())); // $NON-NLS-1$ // Return null so that the servlet can return a 404 return null; } }