From 8a867831fb9848499937c659dc9b135257ca92d4 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Tue, 7 Apr 2015 08:06:03 +0200 Subject: [PATCH] various refactoring added haslist added separate config file for client and server --- build.gradle | 6 +- jpacrepo.iml | 7 ++ src/main/java/client/MainClient.java | 17 --- .../jpacrepo/context}/ApplicationContext.java | 16 ++- .../org/jpacrepo/context/ContextProducer.java | 18 +++ .../context/DefaultConfiguration.java | 18 +++ .../java/org/jpacrepo/model/HashList.java | 47 +++++++ .../{ => org/jpacrepo}/model/PkgData.java | 5 +- .../{ => org/jpacrepo}/model/PkgList.java | 2 +- .../{ => org/jpacrepo}/model/PkgName.java | 2 +- .../java/org/jpacrepo/pacbase/Hasher.java | 61 +++++++++ .../{ => org/jpacrepo}/pacbase/Parser.java | 45 +------ .../jpacrepo}/persistence/QueryEngine.java | 2 +- .../jpacrepo}/service/ApplicationConfig.java | 2 +- .../jpacrepo}/service/PacmanService.java | 2 +- .../jpacrepo}/service/PacmanServiceEJB.java | 34 +++-- .../jpacrepo}/service/PacmanWebService.java | 118 ++++++------------ src/main/resources/META-INF/beans.xml | 0 src/test/java/ClientTest.java | 28 +---- src/test/java/ParseTest.java | 6 +- 20 files changed, 249 insertions(+), 187 deletions(-) delete mode 100644 src/main/java/client/MainClient.java rename src/main/java/{service => org/jpacrepo/context}/ApplicationContext.java (79%) create mode 100644 src/main/java/org/jpacrepo/context/ContextProducer.java create mode 100644 src/main/java/org/jpacrepo/context/DefaultConfiguration.java create mode 100644 src/main/java/org/jpacrepo/model/HashList.java rename src/main/java/{ => org/jpacrepo}/model/PkgData.java (89%) rename src/main/java/{ => org/jpacrepo}/model/PkgList.java (97%) rename src/main/java/{ => org/jpacrepo}/model/PkgName.java (92%) create mode 100644 src/main/java/org/jpacrepo/pacbase/Hasher.java rename src/main/java/{ => org/jpacrepo}/pacbase/Parser.java (81%) rename src/main/java/{ => org/jpacrepo}/persistence/QueryEngine.java (97%) rename src/main/java/{ => org/jpacrepo}/service/ApplicationConfig.java (96%) rename src/main/java/{ => org/jpacrepo}/service/PacmanService.java (82%) rename src/main/java/{ => org/jpacrepo}/service/PacmanServiceEJB.java (79%) rename src/main/java/{ => org/jpacrepo}/service/PacmanWebService.java (66%) create mode 100644 src/main/resources/META-INF/beans.xml diff --git a/build.gradle b/build.gradle index e8aae06..d3bf562 100644 --- a/build.gradle +++ b/build.gradle @@ -42,14 +42,14 @@ task deployWildfly(dependsOn: 'war') << { // client.jar task clientJar(type: Jar) { from(sourceSets.main.output) { - archiveName project.name + "-client.jar" - include "model/**" - include "pacbase/**" + archiveName project.name + "-common.jar" + include 'org/jpacrepo/model/**', 'org/jpacrepo/pacbase/**', 'org/jpacrepo/context/ApplicationContext.class' } } // server.jar task serverJar(type: Jar) { from(sourceSets.main.output) { + } } \ No newline at end of file diff --git a/jpacrepo.iml b/jpacrepo.iml index 4e72806..f322343 100644 --- a/jpacrepo.iml +++ b/jpacrepo.iml @@ -51,5 +51,12 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/java/client/MainClient.java b/src/main/java/client/MainClient.java deleted file mode 100644 index 6ee4193..0000000 --- a/src/main/java/client/MainClient.java +++ /dev/null @@ -1,17 +0,0 @@ -package client; - -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.WebTarget; - -/** - * Created by walter on 29/03/15. - */ -public class MainClient -{ - public static void main(String[] args) - { - Client client = ClientBuilder.newClient(); - WebTarget target = client.target("http://www.myserver.com/book"); - } -} diff --git a/src/main/java/service/ApplicationContext.java b/src/main/java/org/jpacrepo/context/ApplicationContext.java similarity index 79% rename from src/main/java/service/ApplicationContext.java rename to src/main/java/org/jpacrepo/context/ApplicationContext.java index ae02262..3451bd0 100644 --- a/src/main/java/service/ApplicationContext.java +++ b/src/main/java/org/jpacrepo/context/ApplicationContext.java @@ -1,12 +1,15 @@ -package service; +package org.jpacrepo.context; -import model.PkgData; +import org.jpacrepo.model.PkgData; import javax.enterprise.context.ApplicationScoped; +import javax.inject.Qualifier; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; import java.util.Properties; /** @@ -16,18 +19,23 @@ import java.util.Properties; @ApplicationScoped public class ApplicationContext { + public String getRepoFolder() + { + return repoFolder; + } + private Properties systemProperties; private String repoFolder; - public ApplicationContext() + public ApplicationContext(String propertyFile) { systemProperties = new Properties(); InputStream input = null; try { - input = new FileInputStream("/etc/jpacrepo/config.properties"); + input = new FileInputStream(propertyFile); // load a properties file systemProperties.load(input); // get the property value and print it out diff --git a/src/main/java/org/jpacrepo/context/ContextProducer.java b/src/main/java/org/jpacrepo/context/ContextProducer.java new file mode 100644 index 0000000..ed03eb8 --- /dev/null +++ b/src/main/java/org/jpacrepo/context/ContextProducer.java @@ -0,0 +1,18 @@ +package org.jpacrepo.context; + +import javax.enterprise.inject.Produces; + +/** + * Created by walter on 04/04/15. + */ + + +public class ContextProducer +{ + @Produces + @DefaultConfiguration + public ApplicationContext produce() + { + return new ApplicationContext("/etc/jpacrepo/server.properties"); + } +} diff --git a/src/main/java/org/jpacrepo/context/DefaultConfiguration.java b/src/main/java/org/jpacrepo/context/DefaultConfiguration.java new file mode 100644 index 0000000..510ea83 --- /dev/null +++ b/src/main/java/org/jpacrepo/context/DefaultConfiguration.java @@ -0,0 +1,18 @@ +package org.jpacrepo.context; + +import javax.inject.Qualifier; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Created by walter on 04/04/15. + */ + +@Qualifier +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER}) +public @interface DefaultConfiguration +{ +} diff --git a/src/main/java/org/jpacrepo/model/HashList.java b/src/main/java/org/jpacrepo/model/HashList.java new file mode 100644 index 0000000..de1c1c8 --- /dev/null +++ b/src/main/java/org/jpacrepo/model/HashList.java @@ -0,0 +1,47 @@ +package org.jpacrepo.model; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlSeeAlso; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * Created by walter on 29/03/15. + */ + +@XmlRootElement +public class HashList extends ArrayList +{ + + // ====================================== + // = Constructors = + // ====================================== + + public HashList() + { + super(); + } + + public HashList(Collection c) + { + super(c); + } + + // ====================================== + // = Getters & Setters = + // ====================================== + + @XmlElement(name = "hash") + public List getPackages() + { + return this; + } + + public void setPackages(List pkgs) + { + this.clear(); + this.addAll(pkgs); + } +} \ No newline at end of file diff --git a/src/main/java/model/PkgData.java b/src/main/java/org/jpacrepo/model/PkgData.java similarity index 89% rename from src/main/java/model/PkgData.java rename to src/main/java/org/jpacrepo/model/PkgData.java index 340bfba..fe53135 100644 --- a/src/main/java/model/PkgData.java +++ b/src/main/java/org/jpacrepo/model/PkgData.java @@ -1,4 +1,4 @@ -package model; +package org.jpacrepo.model; import javax.persistence.*; import javax.xml.bind.annotation.XmlRootElement; @@ -13,11 +13,12 @@ import java.util.List; @Entity @XmlRootElement @NamedQuery(name="searchById", query = "SELECT p FROM PkgData p WHERE p.id = :id") +@Table(indexes = { @Index(columnList = "md5sum", unique = true), @Index(columnList = "fileName", unique = true) }) public class PkgData { @Id @GeneratedValue - Integer id; + public Integer id; @ManyToOne(cascade = CascadeType.PERSIST) public PkgName name; diff --git a/src/main/java/model/PkgList.java b/src/main/java/org/jpacrepo/model/PkgList.java similarity index 97% rename from src/main/java/model/PkgList.java rename to src/main/java/org/jpacrepo/model/PkgList.java index 6c3c281..d5c30d4 100644 --- a/src/main/java/model/PkgList.java +++ b/src/main/java/org/jpacrepo/model/PkgList.java @@ -1,4 +1,4 @@ -package model; +package org.jpacrepo.model; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; diff --git a/src/main/java/model/PkgName.java b/src/main/java/org/jpacrepo/model/PkgName.java similarity index 92% rename from src/main/java/model/PkgName.java rename to src/main/java/org/jpacrepo/model/PkgName.java index 9880339..e4e8375 100644 --- a/src/main/java/model/PkgName.java +++ b/src/main/java/org/jpacrepo/model/PkgName.java @@ -1,4 +1,4 @@ -package model; +package org.jpacrepo.model; import javax.persistence.Entity; import javax.persistence.Id; diff --git a/src/main/java/org/jpacrepo/pacbase/Hasher.java b/src/main/java/org/jpacrepo/pacbase/Hasher.java new file mode 100644 index 0000000..8cd85d3 --- /dev/null +++ b/src/main/java/org/jpacrepo/pacbase/Hasher.java @@ -0,0 +1,61 @@ +package org.jpacrepo.pacbase; + +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; +import org.apache.commons.compress.compressors.xz.XZCompressorInputStream; +import org.jpacrepo.model.PkgData; +import org.jpacrepo.model.PkgName; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.*; + +/** + * Created by walter on 05/04/15. + */ +public class Hasher +{ + static private final MessageDigest md5; + + static + { + try + { + md5 = MessageDigest.getInstance("MD5"); + } + catch (NoSuchAlgorithmException e) + { + throw new RuntimeException(e); + } + } + + public static String computeMD5(InputStream is) throws IOException + { + md5.reset(); + while(is.available()>0) + { + byte[] buffer2 = new byte[1000000]; + is.read(buffer2, 0, 1000000); + md5.update(buffer2); + } + is.close(); + return bytesToHex(md5.digest()); + } + + final protected static char[] hexArray = "0123456789ABCDEF".toCharArray(); + + public static String bytesToHex(byte[] bytes) { + char[] hexChars = new char[bytes.length * 2]; + for ( int j = 0; j < bytes.length; j++ ) { + int v = bytes[j] & 0xFF; + hexChars[j * 2] = hexArray[v >>> 4]; + hexChars[j * 2 + 1] = hexArray[v & 0x0F]; + } + return new String(hexChars); + } +} diff --git a/src/main/java/pacbase/Parser.java b/src/main/java/org/jpacrepo/pacbase/Parser.java similarity index 81% rename from src/main/java/pacbase/Parser.java rename to src/main/java/org/jpacrepo/pacbase/Parser.java index 6280517..3d6e524 100644 --- a/src/main/java/pacbase/Parser.java +++ b/src/main/java/org/jpacrepo/pacbase/Parser.java @@ -1,7 +1,7 @@ -package pacbase; +package org.jpacrepo.pacbase; -import model.PkgData; -import model.PkgName; +import org.jpacrepo.model.PkgData; +import org.jpacrepo.model.PkgName; import org.apache.commons.compress.archivers.ArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import org.apache.commons.compress.compressors.xz.XZCompressorInputStream; @@ -20,19 +20,6 @@ import java.util.*; */ public class Parser { - static private final MessageDigest md5; - - static - { - try - { - md5 = MessageDigest.getInstance("MD5"); - } - catch (NoSuchAlgorithmException e) - { - throw new RuntimeException(e); - } - } public static PkgData parseFile(File file) throws Exception { @@ -138,7 +125,7 @@ public class Parser } } - data.md5sum = computeMD5(new FileInputStream(file)); + data.md5sum = Hasher.computeMD5(new FileInputStream(file)); data.fileName = file.getName(); return data; } @@ -149,28 +136,4 @@ public class Parser return null; } - public static String computeMD5(InputStream is) throws IOException - { - md5.reset(); - while(is.available()>0) - { - byte[] buffer2 = new byte[1000000]; - is.read(buffer2, 0, 1000000); - md5.update(buffer2); - } - is.close(); - return bytesToHex(md5.digest()); - } - - final protected static char[] hexArray = "0123456789ABCDEF".toCharArray(); - - public static String bytesToHex(byte[] bytes) { - char[] hexChars = new char[bytes.length * 2]; - for ( int j = 0; j < bytes.length; j++ ) { - int v = bytes[j] & 0xFF; - hexChars[j * 2] = hexArray[v >>> 4]; - hexChars[j * 2 + 1] = hexArray[v & 0x0F]; - } - return new String(hexChars); - } } diff --git a/src/main/java/persistence/QueryEngine.java b/src/main/java/org/jpacrepo/persistence/QueryEngine.java similarity index 97% rename from src/main/java/persistence/QueryEngine.java rename to src/main/java/org/jpacrepo/persistence/QueryEngine.java index 0117e7f..79464bf 100644 --- a/src/main/java/persistence/QueryEngine.java +++ b/src/main/java/org/jpacrepo/persistence/QueryEngine.java @@ -1,4 +1,4 @@ -package persistence; +package org.jpacrepo.persistence; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/service/ApplicationConfig.java b/src/main/java/org/jpacrepo/service/ApplicationConfig.java similarity index 96% rename from src/main/java/service/ApplicationConfig.java rename to src/main/java/org/jpacrepo/service/ApplicationConfig.java index 2f3698a..fcda9f2 100644 --- a/src/main/java/service/ApplicationConfig.java +++ b/src/main/java/org/jpacrepo/service/ApplicationConfig.java @@ -1,4 +1,4 @@ -package service; +package org.jpacrepo.service; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; diff --git a/src/main/java/service/PacmanService.java b/src/main/java/org/jpacrepo/service/PacmanService.java similarity index 82% rename from src/main/java/service/PacmanService.java rename to src/main/java/org/jpacrepo/service/PacmanService.java index c5aadfb..287f13b 100644 --- a/src/main/java/service/PacmanService.java +++ b/src/main/java/org/jpacrepo/service/PacmanService.java @@ -1,4 +1,4 @@ -package service; +package org.jpacrepo.service; import javax.ejb.Remote; diff --git a/src/main/java/service/PacmanServiceEJB.java b/src/main/java/org/jpacrepo/service/PacmanServiceEJB.java similarity index 79% rename from src/main/java/service/PacmanServiceEJB.java rename to src/main/java/org/jpacrepo/service/PacmanServiceEJB.java index 8d53ece..9d648c4 100644 --- a/src/main/java/service/PacmanServiceEJB.java +++ b/src/main/java/org/jpacrepo/service/PacmanServiceEJB.java @@ -1,11 +1,13 @@ -package service; +package org.jpacrepo.service; -import model.PkgData; -import model.PkgName; +import org.jpacrepo.context.ApplicationContext; +import org.jpacrepo.context.DefaultConfiguration; +import org.jpacrepo.model.PkgData; +import org.jpacrepo.model.PkgName; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.DirectoryFileFilter; import org.apache.commons.io.filefilter.RegexFileFilter; -import pacbase.Parser; +import org.jpacrepo.pacbase.Parser; import javax.annotation.PostConstruct; import javax.annotation.Resource; @@ -35,16 +37,14 @@ public class PacmanServiceEJB implements PacmanService private EntityManager em; @Inject + @DefaultConfiguration private ApplicationContext ctx; - private Logger log = Logger.getLogger(PacmanServiceEJB.class.getName()); + private Logger logger = Logger.getLogger(PacmanServiceEJB.class.getName()); private String nameQuery = "SELECT pname FROM PkgName pname WHERE id = :name"; private String fileQuery = "SELECT pdata FROM PkgData pdata WHERE name.id = :name AND version = :version AND arch = :arch"; - private String fileNameQuery = "SELECT pdata FROM PkgData pdata WHERE fileName = :fileName"; - private String hashQuery = "SELECT pdata FROM PkgData pdata WHERE md5sum = :md5sum"; - private String idQuery = "SELECT pdata FROM PkgData pdata WHERE id = :id"; @PostConstruct public void syncDB() @@ -62,7 +62,7 @@ public class PacmanServiceEJB implements PacmanService File file = ctx.getFile(p); if (!file.exists()) { - log.log(Level.INFO, String.format("Removing package %s", file.getName())); + logger.log(Level.INFO, String.format("Removing package %s", file.getName())); em.remove(p); } } @@ -74,10 +74,12 @@ public class PacmanServiceEJB implements PacmanService //Aggiunge sul DB i pacchetti presenti nel filesystem Collection ls = FileUtils.listFiles(new File(ctx.getSystemProperties().getProperty("RepoFolder")), new RegexFileFilter(".*\\.pkg\\.tar\\.xz"), DirectoryFileFilter.DIRECTORY); + File f = null; try { for (File file : ls) { + f = file; if (!knownPkg.contains(file.getAbsolutePath())) { ut.begin(); @@ -85,8 +87,18 @@ public class PacmanServiceEJB implements PacmanService ut.commit(); } } - } catch (Exception e) + } + catch (Exception e) { + logger.log(Level.ALL, String.format("Error parsing %s", f.getAbsolutePath())); + try + { + ut.rollback(); + } + catch (SystemException e1) + { + throw new RuntimeException(e1); + } throw new RuntimeException(e); } } @@ -119,7 +131,7 @@ public class PacmanServiceEJB implements PacmanService data.name = savedName.get(0); } em.persist(data); - log.log(Level.INFO, String.format("Persisting package %s", file.getName())); + logger.log(Level.INFO, String.format("Persisting package %s", file.getName())); } } \ No newline at end of file diff --git a/src/main/java/service/PacmanWebService.java b/src/main/java/org/jpacrepo/service/PacmanWebService.java similarity index 66% rename from src/main/java/service/PacmanWebService.java rename to src/main/java/org/jpacrepo/service/PacmanWebService.java index e98319a..f500768 100644 --- a/src/main/java/service/PacmanWebService.java +++ b/src/main/java/org/jpacrepo/service/PacmanWebService.java @@ -1,22 +1,28 @@ -package service; +package org.jpacrepo.service; -import model.PkgData; -import model.PkgList; -import model.PkgName; +import org.jpacrepo.context.ApplicationContext; +import org.jpacrepo.context.*; +import org.jpacrepo.model.HashList; +import org.jpacrepo.model.PkgData; +import org.jpacrepo.model.PkgList; +import org.jpacrepo.model.PkgName; import org.apache.commons.io.IOUtils; -import pacbase.Parser; -import persistence.QueryEngine; +import org.jpacrepo.pacbase.Hasher; +import org.jpacrepo.pacbase.Parser; +import org.jpacrepo.persistence.QueryEngine; import javax.ejb.Singleton; import javax.inject.Inject; import javax.persistence.*; import javax.ws.rs.*; import javax.ws.rs.core.*; +import javax.ws.rs.core.Context; import java.io.*; import java.net.URI; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.util.List; +import java.util.logging.Level; import java.util.logging.Logger; @Path("/pkg") @@ -36,18 +42,13 @@ public class PacmanWebService private String nameQuery = "SELECT pname FROM PkgName pname WHERE id = :name"; - private String fileQuery = "SELECT pdata FROM PkgData pdata"; private String fileNameQuery = "SELECT pdata FROM PkgData pdata WHERE fileName = :fileName"; private String hashQuery = "SELECT pdata FROM PkgData pdata WHERE md5sum = :md5sum"; - private String idQuery = "SELECT pdata FROM PkgData pdata WHERE id = :id"; @Inject + @DefaultConfiguration private ApplicationContext ctx; - /** - * JSON : curl -X GET -H "Accept: application/json" http://localhost:8080/chapter15-service-1.0/rs/book/1 -v - * XML : curl -X GET -H "Accept: application/xml" http://localhost:8080/chapter15-service-1.0/rs/book/1 -v - */ @GET @Path("search") public Response getPackage(@QueryParam("name") String name, @@ -68,12 +69,10 @@ public class PacmanWebService { QueryEngine qe = new QueryEngine(PkgData.class); qe.select(); - TypedQuery fquery = em.createQuery(fileQuery, PkgData.class); if (name != null) qe.where("name", "=", name); if (version != null) qe.where("version", "=", version); if (arch != null) qe.where("arch", "=", arch); String query = qe.build(); -// log.log(Level.INFO, query); return manageQueryResult(em.createQuery(query).getResultList()); } else @@ -82,6 +81,16 @@ public class PacmanWebService } } + @GET + @Path("hashes") + public Response getHashes() + { + Query query = em.createQuery("SELECT p.md5sum FROM PkgData p"); + List hashes = query.getResultList(); + HashList hl = new HashList(hashes); + return Response.ok(hl).build(); + } + private Response getPackageByHash(String md5sum) { TypedQuery hquery = em.createQuery(hashQuery, PkgData.class); @@ -109,16 +118,22 @@ public class PacmanWebService StreamingOutput stream = (OutputStream output) -> { FileInputStream input = new FileInputStream(ctx.getFile(pkg)); - try { + try + { int bytes; - while ((bytes = input.read()) != -1) { + while ((bytes = input.read()) != -1) + { output.write(bytes); } - } catch (Exception e) { + } + catch (Exception e) + { throw new WebApplicationException(e); - } finally { - if (output != null) output.close(); - if (input != null) input.close(); + } + finally + { + output.close(); + input.close(); } }; return Response.ok(stream).header("Content-Length", ctx.getFile(pkg).length()).build(); @@ -145,12 +160,12 @@ public class PacmanWebService if (filename == null) throw new BadRequestException(); - File file = new File("/tmp/"/*ctx.getSystemProperties().getProperty("RepoFolder")*/, filename); + File file = new File(ctx.getRepoFolder(), filename); FileOutputStream fos = new FileOutputStream(file); IOUtils.copy(input, fos); fos.close(); FileInputStream fis = new FileInputStream(file); - String hash = Parser.computeMD5(fis); + String hash = Hasher.computeMD5(fis); TypedQuery hquery = em.createQuery(hashQuery, PkgData.class); hquery.setParameter("md5sum", hash); @@ -158,7 +173,7 @@ public class PacmanWebService if (savedFiles.size() > 0) { - file.delete(); + Files.delete(file.toPath()); return Response.notModified().build(); } else @@ -183,6 +198,7 @@ public class PacmanWebService } em.persist(pkg); + log.log(Level.INFO, String.format("Persisiting package %s", pkg.fileName)); URI pkgUri = uriInfo.getAbsolutePathBuilder().path(pkg.fileName).build(); return Response.created(pkgUri).build(); } @@ -218,58 +234,4 @@ public class PacmanWebService } } -} - -// ====================================== -// = Public Methods = -// ====================================== - -/** - * curl -X POST --data-binary "Science fiction comedy bookfalse1-84023-742-235412.5The Hitchhiker's Guide to the Galaxy" -H "Content-Type: application/xml" http://localhost:8080/chapter15-service-1.0/rs/book -v - * curl -X POST --data-binary "{\"description\":\"Science fiction comedy book\",\"illustrations\":false,\"isbn\":\"1-84023-742-2\",\"nbOfPage\":354,\"price\":12.5,\"title\":\"The Hitchhiker's Guide to the Galaxy\"}" -H "Content-Type: application/json" http://localhost:8080/chapter15-service-1.0/rs/book -v - */ -// @POST -// public Response createBook(Book book) { -// if (book == null) -// throw new BadRequestException(); -// -// em.persist(book); -// URI bookUri = uriInfo.getAbsolutePathBuilder().path(book.getId()).build(); -// return Response.created(bookUri).build(); -// } - -// @PUT -// public Response updateBook(Book book) { -// if (book == null) -// throw new BadRequestException(); -// -// em.merge(book); -// return Response.ok().build(); -// } - -/** - * curl -X DELETE http://localhost:8080/chapter15-service-1.0/rs/book/1 -v - */ -// @DELETE -// @Path("{id}") -// public Response deleteBook(@PathParam("id") String id) { -// Book book = em.find(Book.class, id); -// -// if (book == null) -// throw new NotFoundException(); -// -// em.remove(book); -// -// return Response.noContent().build(); -// } - -/** - * JSON : curl -X GET -H "Accept: application/json" http://localhost:8080/chapter15-service-1.0/rs/book -v - * XML : curl -X GET -H "Accept: application/xml" http://localhost:8080/chapter15-service-1.0/rs/book -v - */ -// @GET -// public Response getAllBooks() { -// TypedQuery query = em.createNamedQuery(Book.FIND_ALL, Book.class); -// Books books = new Books(query.getResultList()); -// return Response.ok(books).build(); -// } \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/resources/META-INF/beans.xml b/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000..e69de29 diff --git a/src/test/java/ClientTest.java b/src/test/java/ClientTest.java index a5c4c13..4b4f6d3 100644 --- a/src/test/java/ClientTest.java +++ b/src/test/java/ClientTest.java @@ -1,29 +1,17 @@ import com.thoughtworks.xstream.XStream; -import model.PkgData; -import org.jboss.resteasy.annotations.interception.ServerInterceptor; -import org.jboss.resteasy.core.ResourceMethodInvoker; -import org.jboss.resteasy.core.ServerResponse; +import org.jpacrepo.model.PkgData; import org.jboss.resteasy.plugins.providers.RegisterBuiltin; import org.jboss.resteasy.plugins.providers.jackson.ResteasyJacksonProvider; -import org.jboss.resteasy.spi.Failure; -import org.jboss.resteasy.spi.HttpRequest; import org.jboss.resteasy.spi.ResteasyProviderFactory; -import org.jboss.resteasy.spi.interception.PreProcessInterceptor; -import org.jboss.resteasy.spi.metadata.ResourceMethod; import org.junit.Test; -import pacbase.Parser; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.WebApplicationException; import javax.ws.rs.client.*; -import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.ext.Provider; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; -import java.util.logging.Logger; /** * Created by walter on 29/03/15. @@ -56,23 +44,17 @@ public class ClientTest { ResteasyProviderFactory instance = ResteasyProviderFactory.getInstance(); RegisterBuiltin.register(instance); - instance.registerProvider(ResteasyJacksonProvider.class); Client client = ClientBuilder.newClient(); UriBuilder builder = UriBuilder.fromUri("http://localhost:8080/").path("jpacrepo-1.0/rest/pkg/upload"); builder.matrixParam("filename", "k290-fnkeyctl-1.2-1-x86_64.pkg.tar.xz"); WebTarget target = client.target(builder.build()); - FileInputStream fis = new FileInputStream(new File("/tmp/k290-fnkeyctl-1.2-1-x86_64.pkg.tar.xz")); + FileInputStream fis = new FileInputStream(new File("/tmp/ciao/k290-fnkeyctl-1.2-1-x86_64.pkg.tar.xz")); - byte[] data = new byte[fis.available()]; - fis.read(data); - Entity e = Entity.entity(data, MediaType.APPLICATION_OCTET_STREAM); + Entity e = Entity.entity(fis, MediaType.APPLICATION_OCTET_STREAM); Invocation invocation = target.request().buildPost(e); System.out.println(target.request().toString()); Response response = invocation.invoke(); System.out.println(response.getStatusInfo()); - if (response.getStatusInfo() == Response.Status.OK) - { - System.out.println(response.getStatusInfo()); - } + assert Response.Status.CREATED.getStatusCode() == response.getStatus(); } } diff --git a/src/test/java/ParseTest.java b/src/test/java/ParseTest.java index 4196592..cb92b6c 100644 --- a/src/test/java/ParseTest.java +++ b/src/test/java/ParseTest.java @@ -1,10 +1,10 @@ -import model.PkgData; +import org.jpacrepo.model.PkgData; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.DirectoryFileFilter; import org.apache.commons.io.filefilter.RegexFileFilter; import org.junit.Test; -import pacbase.Parser; -import service.PacmanService; +import org.jpacrepo.pacbase.Parser; +import org.jpacrepo.service.PacmanService; import javax.naming.*; import java.io.File;