removed filepath from database, fixed various bugs with REST POST method

This commit is contained in:
2015-04-04 10:10:27 +02:00
parent 96d18a1359
commit ee2071c5fa
5 changed files with 48 additions and 23 deletions

View File

@@ -43,8 +43,6 @@ public class PkgData
public String md5sum; public String md5sum;
public String filePath;
public String fileName; public String fileName;
@ElementCollection(fetch = FetchType.EAGER) @ElementCollection(fetch = FetchType.EAGER)
@@ -70,10 +68,4 @@ public class PkgData
@ElementCollection(fetch = FetchType.EAGER) @ElementCollection(fetch = FetchType.EAGER)
public List<String> backup; public List<String> backup;
public String getFileName()
{
return String.format("%s-%s-%s.pkg.tar.xz", name, version, arch);
}
} }

View File

@@ -139,7 +139,6 @@ public class Parser
} }
} }
data.md5sum = computeMD5(new FileInputStream(file)); data.md5sum = computeMD5(new FileInputStream(file));
data.filePath = file.getAbsolutePath();
data.fileName = file.getName(); data.fileName = file.getName();
return data; return data;
} }

View File

@@ -1,6 +1,9 @@
package service; package service;
import model.PkgData;
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ApplicationScoped;
import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@@ -15,6 +18,8 @@ public class ApplicationContext
{ {
private Properties systemProperties; private Properties systemProperties;
private String repoFolder;
public ApplicationContext() public ApplicationContext()
{ {
systemProperties = new Properties(); systemProperties = new Properties();
@@ -26,6 +31,8 @@ public class ApplicationContext
// load a properties file // load a properties file
systemProperties.load(input); systemProperties.load(input);
// get the property value and print it out // get the property value and print it out
systemProperties.getProperty("RepoFolder");
repoFolder = systemProperties.getProperty("RepoFolder");
} catch (IOException ex) } catch (IOException ex)
{ {
throw new RuntimeException(ex); throw new RuntimeException(ex);
@@ -48,4 +55,9 @@ public class ApplicationContext
{ {
return systemProperties; return systemProperties;
} }
public File getFile(PkgData pkg)
{
return new File(new File(repoFolder), pkg.fileName);
}
} }

View File

@@ -58,8 +58,8 @@ public class PacmanServiceEJB implements PacmanService
List<PkgData> listaDB = em.createQuery("SELECT p FROM PkgData p", PkgData.class).getResultList(); List<PkgData> listaDB = em.createQuery("SELECT p FROM PkgData p", PkgData.class).getResultList();
for (PkgData p : listaDB) for (PkgData p : listaDB)
{ {
knownPkg.add(p.filePath); knownPkg.add(p.fileName);
File file = new File(p.filePath); File file = ctx.getFile(p);
if (!file.exists()) if (!file.exists())
{ {
log.log(Level.INFO, String.format("Removing package %s", file.getName())); log.log(Level.INFO, String.format("Removing package %s", file.getName()));
@@ -76,15 +76,15 @@ public class PacmanServiceEJB implements PacmanService
Collection<File> ls = FileUtils.listFiles(new File(ctx.getSystemProperties().getProperty("RepoFolder")), new RegexFileFilter(".*\\.pkg\\.tar\\.xz"), DirectoryFileFilter.DIRECTORY); Collection<File> ls = FileUtils.listFiles(new File(ctx.getSystemProperties().getProperty("RepoFolder")), new RegexFileFilter(".*\\.pkg\\.tar\\.xz"), DirectoryFileFilter.DIRECTORY);
try try
{ {
ut.begin();
for (File file : ls) for (File file : ls)
{ {
if (!knownPkg.contains(file.getAbsolutePath())) if (!knownPkg.contains(file.getAbsolutePath()))
{ {
ut.begin();
parseFile(file); parseFile(file);
ut.commit();
} }
} }
ut.commit();
} catch (Exception e) } catch (Exception e)
{ {
throw new RuntimeException(e); throw new RuntimeException(e);

View File

@@ -2,6 +2,7 @@ package service;
import model.PkgData; import model.PkgData;
import model.PkgList; import model.PkgList;
import model.PkgName;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import pacbase.Parser; import pacbase.Parser;
import persistence.QueryEngine; import persistence.QueryEngine;
@@ -13,6 +14,8 @@ import javax.ws.rs.*;
import javax.ws.rs.core.*; import javax.ws.rs.core.*;
import java.io.*; import java.io.*;
import java.net.URI; import java.net.URI;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.List; import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -105,7 +108,7 @@ public class PacmanWebService
PkgData pkg = fnquery.getSingleResult(); PkgData pkg = fnquery.getSingleResult();
StreamingOutput stream = (OutputStream output) -> StreamingOutput stream = (OutputStream output) ->
{ {
FileInputStream input = new FileInputStream(pkg.filePath); FileInputStream input = new FileInputStream(ctx.getFile(pkg));
try { try {
int bytes; int bytes;
while ((bytes = input.read()) != -1) { while ((bytes = input.read()) != -1) {
@@ -118,7 +121,7 @@ public class PacmanWebService
if (input != null) input.close(); if (input != null) input.close();
} }
}; };
return Response.ok(stream).header("Content-Length", new File(pkg.filePath).length()).build(); return Response.ok(stream).header("Content-Length", ctx.getFile(pkg).length()).build();
} }
catch (NonUniqueResultException e) catch (NonUniqueResultException e)
{ {
@@ -142,7 +145,12 @@ public class PacmanWebService
if (filename == null) if (filename == null)
throw new BadRequestException(); throw new BadRequestException();
String hash = Parser.computeMD5(input); File file = new File("/tmp/"/*ctx.getSystemProperties().getProperty("RepoFolder")*/, filename);
FileOutputStream fos = new FileOutputStream(file);
IOUtils.copy(input, fos);
fos.close();
FileInputStream fis = new FileInputStream(file);
String hash = Parser.computeMD5(fis);
TypedQuery<PkgData> hquery = em.createQuery(hashQuery, PkgData.class); TypedQuery<PkgData> hquery = em.createQuery(hashQuery, PkgData.class);
hquery.setParameter("md5sum", hash); hquery.setParameter("md5sum", hash);
@@ -150,18 +158,32 @@ public class PacmanWebService
if (savedFiles.size() > 0) if (savedFiles.size() > 0)
{ {
return null; file.delete();
return Response.notModified().build();
} }
else else
{ {
input.reset();
File file = new File("/tmp/sdf"/*ctx.getSystemProperties().getProperty("RepoFolder")*/, filename);
FileOutputStream fos = new FileOutputStream(file);
IOUtils.copy(input,fos);
fos.close();
PkgData pkg = Parser.parseFile(file); PkgData pkg = Parser.parseFile(file);
TypedQuery<PkgName> nquery = em.createQuery(nameQuery, PkgName.class);
nquery.setParameter("name", pkg.name.id);
List<PkgName> savedName = nquery.getResultList();
if (savedName.size() > 0)
{
pkg.name = savedName.get(0);
}
File destinationFile = new File(ctx.getSystemProperties().getProperty("RepoFolder"),filename);
try
{
Files.move(file.toPath(), destinationFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
catch (Exception e)
{
file.delete();
throw e;
}
em.persist(pkg); em.persist(pkg);
URI pkgUri = uriInfo.getAbsolutePathBuilder().path(pkg.filePath).build(); URI pkgUri = uriInfo.getAbsolutePathBuilder().path(pkg.fileName).build();
return Response.created(pkgUri).build(); return Response.created(pkgUri).build();
} }
} }