Search in sources :

Example 41 with LogicalData

use of nl.uva.cs.lobcder.resources.LogicalData in project lobcder by skoulouzis.

the class SetBulkPermissionsResource method setPermissions2.

/**
 * Sets permissions for folder and subtree
 *
 * @param path the folder's path
 * @param jbPermissions the permissions: owner, read, write
 */
@PUT
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void setPermissions2(@QueryParam("path") String path, JAXBElement<Permissions> jbPermissions) throws UnsupportedEncodingException {
    try (Connection connection = catalogue.getConnection()) {
        try {
            Permissions permissions = jbPermissions.getValue();
            MyPrincipal principal = (MyPrincipal) request.getAttribute("myprincipal");
            LogicalData ld = catalogue.getLogicalDataByPath(io.milton.common.Path.path(path), connection);
            Stack<Long> folders = new Stack<>();
            ArrayList<Long> elements = new ArrayList<>();
            ArrayList<Long> changeOwner = new ArrayList<>();
            Permissions p = catalogue.getPermissions(ld.getUid(), ld.getOwner(), connection);
            if (ld.isFolder() && principal.canRead(p)) {
                folders.add(ld.getUid());
            }
            if (principal.canWrite(p)) {
                elements.add(ld.getUid());
                if (!ld.getOwner().equals(permissions.getOwner())) {
                    changeOwner.add(ld.getUid());
                }
            }
            try (PreparedStatement ps = connection.prepareStatement("SELECT uid, ownerId, datatype FROM ldata_table WHERE parentRef = ?")) {
                while (!folders.isEmpty()) {
                    Long curUid = folders.pop();
                    ps.setLong(1, curUid);
                    try (ResultSet resultSet = ps.executeQuery()) {
                        while (resultSet.next()) {
                            Long entry_uid = resultSet.getLong(1);
                            String entry_owner = resultSet.getString(2);
                            String entry_datatype = resultSet.getString(3);
                            Permissions entry_p = catalogue.getPermissions(entry_uid, entry_owner, connection);
                            if (entry_datatype.equals(Constants.LOGICAL_FOLDER) && principal.canRead(entry_p)) {
                                folders.push(entry_uid);
                            }
                            if (principal.canWrite(entry_p)) {
                                elements.add(entry_uid);
                                if (!entry_owner.equals(permissions.getOwner())) {
                                    changeOwner.add(entry_uid);
                                }
                            }
                        }
                    }
                }
            }
            final int batchSize = 100;
            int count = 0;
            try (PreparedStatement psDel = connection.prepareStatement("DELETE FROM permission_table WHERE permission_table.ldUidRef = ?");
                PreparedStatement psIns = connection.prepareStatement("INSERT INTO permission_table (permType, ldUidRef, roleName) VALUES (?, ?, ?)")) {
                for (Long uid : elements) {
                    psDel.setLong(1, uid);
                    psDel.addBatch();
                    for (String cr : permissions.getRead()) {
                        psIns.setString(1, "read");
                        psIns.setLong(2, uid);
                        psIns.setString(3, cr);
                        psIns.addBatch();
                    }
                    for (String cw : permissions.getWrite()) {
                        psIns.setString(1, "write");
                        psIns.setLong(2, uid);
                        psIns.setString(3, cw);
                        psIns.addBatch();
                    }
                    count++;
                    if (count % batchSize == 0) {
                        psDel.executeBatch();
                        psIns.executeBatch();
                    }
                }
                psDel.executeBatch();
                psIns.executeBatch();
            }
            try (PreparedStatement ps = connection.prepareStatement("UPDATE ldata_table SET ownerId = ? WHERE uid = ?")) {
                count = 0;
                ps.setString(1, permissions.getOwner());
                for (Long uid : changeOwner) {
                    ps.setLong(2, uid);
                    ps.addBatch();
                    count++;
                    if (count % batchSize == 0) {
                        ps.executeBatch();
                    }
                }
                ps.executeBatch();
            }
            connection.commit();
        } catch (SQLException ex) {
            Logger.getLogger(SetBulkPermissionsResource.class.getName()).log(Level.SEVERE, null, ex);
            connection.rollback();
            throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
        }
    } catch (SQLException ex) {
        Logger.getLogger(SetBulkPermissionsResource.class.getName()).log(Level.SEVERE, null, ex);
        throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
    }
}
Also used : ArrayList(java.util.ArrayList) Stack(java.util.Stack) LogicalData(nl.uva.cs.lobcder.resources.LogicalData) MyPrincipal(nl.uva.cs.lobcder.auth.MyPrincipal) Permissions(nl.uva.cs.lobcder.auth.Permissions)

Example 42 with LogicalData

use of nl.uva.cs.lobcder.resources.LogicalData in project lobcder by skoulouzis.

the class Assimilator method getLogicalDataByParentRefAndName.

public LogicalData getLogicalDataByParentRefAndName(Long parentRef, String name, @Nonnull Connection connection) throws SQLException {
    try (PreparedStatement preparedStatement = connection.prepareStatement("SELECT uid, ownerId, datatype, createDate, modifiedDate, ldLength, " + "contentTypesStr, pdriGroupRef, isSupervised, checksum, lastValidationDate, " + "lockTokenID, lockScope, lockType, lockedByUser, lockDepth, lockTimeout, " + "description, locationPreference " + "FROM ldata_table WHERE ldata_table.parentRef = ? AND ldata_table.ldName = ?")) {
        preparedStatement.setLong(1, parentRef);
        preparedStatement.setString(2, name);
        ResultSet rs = preparedStatement.executeQuery();
        if (rs.next()) {
            LogicalData res = new LogicalData();
            res.setUid(rs.getLong(1));
            res.setParentRef(parentRef);
            res.setOwner(rs.getString(2));
            res.setType(rs.getString(3));
            res.setName(name);
            res.setCreateDate(rs.getTimestamp(4).getTime());
            res.setModifiedDate(rs.getTimestamp(5).getTime());
            res.setLength(rs.getLong(6));
            res.setContentTypesAsString(rs.getString(7));
            res.setPdriGroupId(rs.getLong(8));
            res.setSupervised(rs.getBoolean(9));
            res.setChecksum(rs.getString(10));
            res.setLastValidationDate(rs.getLong(11));
            res.setLockTokenID(rs.getString(12));
            res.setLockScope(rs.getString(13));
            res.setLockType(rs.getString(14));
            res.setLockedByUser(rs.getString(15));
            res.setLockDepth(rs.getString(16));
            res.setLockTimeout(rs.getLong(17));
            res.setDescription(rs.getString(18));
            // res.setDataLocationPreference(rs.getString(19));
            return res;
        } else {
            return null;
        }
    }
}
Also used : LogicalData(nl.uva.cs.lobcder.resources.LogicalData)

Example 43 with LogicalData

use of nl.uva.cs.lobcder.resources.LogicalData in project lobcder by skoulouzis.

the class Assimilator method addRegisteredFolder.

private Long addRegisteredFolder(String importedFolderName, Connection connection) throws SQLException {
    LogicalData entry = new LogicalData();
    entry.setCreateDate(System.currentTimeMillis());
    entry.setModifiedDate(System.currentTimeMillis());
    entry.setName(importedFolderName);
    entry.setOwner("admin");
    entry.setParentRef(new Long(1));
    LogicalData register = registerDirLogicalData(entry, connection);
    return register.getUid();
}
Also used : LogicalData(nl.uva.cs.lobcder.resources.LogicalData)

Example 44 with LogicalData

use of nl.uva.cs.lobcder.resources.LogicalData in project lobcder by skoulouzis.

the class WorkerServlet method processRequest.

/**
 * Process the actual request.
 *
 * @param request The request to be processed.
 * @param response The response to be created.
 * @param content Whether the request body should be written (GET) or not
 * (HEAD).
 * @throws IOException If something fails at I/O level.
 */
private void processRequest(HttpServletRequest request, HttpServletResponse response, boolean content) throws IOException, InterruptedException, URISyntaxException, VlException, JAXBException {
    long startTime = System.currentTimeMillis();
    // Get requested file by path info.
    String requestedFile = request.getPathInfo();
    // Check if file is actually supplied to the request URL.
    PDRI pdri = null;
    if (requestedFile == null || requestedFile.split("/").length < 2) {
        // Do your thing if the file is not supplied to the request URL.
        // Throw an exception, or send 404, or show default/warning page, or just ignore it.
        response.sendError(HttpServletResponse.SC_NOT_FOUND);
        return;
    }
    Path pathAndToken = Path.path(requestedFile);
    // token = pathAndToken.getName();
    fileUID = pathAndToken.getParent().toString().replaceAll("/", "");
    // Logger.getLogger(WorkerServlet.class.getName()).log(Level.FINE, "token: {0} fileUID: {1}", new Object[]{token, fileUID});
    pdri = cat.getPDRI(fileUID);
    fileLogicalName = cat.getLogicalDataWrapped(fileUID).getLogicalData().getName();
    // Check if file actually exists in filesystem.
    if (pdri == null) {
        // Do your thing if the file appears to be non-existing.
        // Throw an exception, or send 404, or show default/warning page, or just ignore it.
        response.sendError(HttpServletResponse.SC_NOT_FOUND);
        return;
    }
    // Prepare some variables. The ETag is an unique identifier of the file.
    long length = pdri.getLength();
    LogicalDataWrapped ldw = Catalogue.logicalDataCache.get(fileUID);
    long lastModified;
    if (ldw != null) {
        LogicalData ld = ldw.getLogicalData();
        lastModified = ld.getModifiedDate();
    } else {
        lastModified = System.currentTimeMillis();
    }
    String eTag = fileLogicalName + "_" + length + "_" + lastModified;
    long expires = System.currentTimeMillis() + DEFAULT_EXPIRE_TIME;
    // Validate request headers for caching ---------------------------------------------------
    // If-None-Match header should contain "*" or ETag. If so, then return 304.
    String ifNoneMatch = request.getHeader("If-None-Match");
    if (ifNoneMatch != null && matches(ifNoneMatch, eTag)) {
        response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
        // Required in 304.
        response.setHeader("ETag", eTag);
        // Postpone cache with 1 week.
        response.setDateHeader("Expires", expires);
        return;
    }
    // If-Modified-Since header should be greater than LastModified. If so, then return 304.
    // This header is ignored if any If-None-Match header is specified.
    long ifModifiedSince = request.getDateHeader("If-Modified-Since");
    if (ifNoneMatch == null && ifModifiedSince != -1 && ifModifiedSince + 1000 > lastModified) {
        response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
        // Required in 304.
        response.setHeader("ETag", eTag);
        // Postpone cache with 1 week.
        response.setDateHeader("Expires", expires);
        return;
    }
    // Validate request headers for resume ----------------------------------------------------
    // If-Match header should contain "*" or ETag. If not, then return 412.
    String ifMatch = request.getHeader("If-Match");
    if (ifMatch != null && !matches(ifMatch, eTag)) {
        response.sendError(HttpServletResponse.SC_PRECONDITION_FAILED);
        return;
    }
    // If-Unmodified-Since header should be greater than LastModified. If not, then return 412.
    long ifUnmodifiedSince = request.getDateHeader("If-Unmodified-Since");
    if (ifUnmodifiedSince != -1 && ifUnmodifiedSince + 1000 <= lastModified) {
        response.sendError(HttpServletResponse.SC_PRECONDITION_FAILED);
        return;
    }
    // Validate and process range -------------------------------------------------------------
    // Prepare some variables. The full Range represents the complete file.
    Range full = new Range(0, length - 1, length);
    List<Range> ranges = new ArrayList<>();
    // Validate and process Range and If-Range headers.
    String range = request.getHeader("Range");
    if (range != null) {
        // Range header should match format "bytes=n-n,n-n,n-n...". If not, then return 416.
        if (!range.matches("^bytes=\\d*-\\d*(,\\d*-\\d*)*$")) {
            // Required in 416.
            response.setHeader("Content-Range", "bytes */" + length);
            response.sendError(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE);
            return;
        }
        // If-Range header should either match ETag or be greater then LastModified. If not,
        // then return full file.
        String ifRange = request.getHeader("If-Range");
        if (ifRange != null && !ifRange.equals(eTag)) {
            try {
                // Throws IAE if invalid.
                long ifRangeTime = request.getDateHeader("If-Range");
                if (ifRangeTime != -1 && ifRangeTime + 1000 < lastModified) {
                    ranges.add(full);
                }
            } catch (IllegalArgumentException ignore) {
                ranges.add(full);
            }
        }
        // If any valid If-Range header, then process each part of byte range.
        if (ranges.isEmpty()) {
            for (String part : range.substring(6).split(",")) {
                // Assuming a file with length of 100, the following examples returns bytes at:
                // 50-80 (50 to 80), 40- (40 to length=100), -20 (length-20=80 to length=100).
                long start = sublong(part, 0, part.indexOf("-"));
                long end = sublong(part, part.indexOf("-") + 1, part.length());
                if (start == -1) {
                    start = length - end;
                    end = length - 1;
                } else if (end == -1 || end > length - 1) {
                    end = length - 1;
                }
                // Check if Range is syntactically valid. If not, then return 416.
                if (start > end) {
                    // Required in 416.
                    response.setHeader("Content-Range", "bytes */" + length);
                    response.sendError(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE);
                    return;
                }
                // Add range.
                ranges.add(new Range(start, end, length));
            }
        }
    }
    // Prepare and initialize response --------------------------------------------------------
    // Get content type by file name and set default GZIP support and content disposition.
    String contentType = getServletContext().getMimeType(fileLogicalName);
    ldw = Catalogue.logicalDataCache.get(fileUID);
    if (contentType == null && ldw != null) {
        contentType = ldw.getLogicalData().getContentTypesAsString();
    } else {
        contentType = "application/octet-stream";
    }
    boolean acceptsGzip = false;
    String disposition = "inline";
    // To add new content types, add new mime-mapping entry in web.xml.
    if (contentType == null) {
        contentType = "application/octet-stream";
    }
    // the browser and expand content type with the one and right character encoding.
    if (contentType.startsWith("text")) {
        String acceptEncoding = request.getHeader("Accept-Encoding");
        acceptsGzip = acceptEncoding != null && accepts(acceptEncoding, "gzip");
        contentType += ";charset=UTF-8";
    } else // the browser, then set to inline, else attachment which will pop a 'save as' dialogue.
    if (!contentType.startsWith("image")) {
        String accept = request.getHeader("Accept");
        disposition = accept != null && accepts(accept, contentType) ? "inline" : "attachment";
    }
    // Initialize response.
    response.reset();
    if (setResponseBufferSize) {
        response.setBufferSize(bufferSize);
    }
    response.setHeader("Content-Disposition", disposition + ";filename=\"" + fileLogicalName + "\"");
    response.setHeader("Accept-Ranges", "bytes");
    response.setHeader("ETag", eTag);
    response.setDateHeader("Last-Modified", lastModified);
    response.setDateHeader("Expires", expires);
    ldw = Catalogue.logicalDataCache.get(fileUID);
    if (ldw != null) {
        response.setContentLength(safeLongToInt(ldw.getLogicalData().getLength()));
    }
    // Send requested file (part(s)) to client ------------------------------------------------
    // Prepare streams.
    // RandomAccessFile input = null;
    OutputStream output = null;
    try {
        // Open streams.
        // input = new RandomAccessFile(file, "r");
        // input = pdri.getData()
        output = response.getOutputStream();
        if (ranges.isEmpty() || ranges.get(0) == full) {
            // Return full file.
            Range r = full;
            response.setContentType(contentType);
            response.setHeader("Content-Range", "bytes " + r.start + "-" + r.end + "/" + r.total);
            if (content) {
                if (acceptsGzip) {
                    // The browser accepts GZIP, so GZIP the content.
                    response.setHeader("Content-Encoding", "gzip");
                    output = new GZIPOutputStream(output, bufferSize);
                } else {
                    // Content length is not directly predictable in case of GZIP.
                    // So only add it if there is no means of GZIP, else browser will hang.
                    response.setHeader("Content-Length", String.valueOf(r.length));
                }
                // Copy full range.
                copy(pdri, output, r.start, r.length, request);
            }
        } else if (ranges.size() == 1) {
            // Return single part of file.
            Range r = ranges.get(0);
            response.setContentType(contentType);
            response.setHeader("Content-Range", "bytes " + r.start + "-" + r.end + "/" + r.total);
            response.setHeader("Content-Length", String.valueOf(r.length));
            // 206.
            response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
            if (content) {
                // Copy single part range.
                copy(pdri, output, r.start, r.length, request);
            }
        } else {
            // Return multiple parts of file.
            response.setContentType("multipart/byteranges; boundary=" + MULTIPART_BOUNDARY);
            // 206.
            response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
            if (content) {
                // Cast back to ServletOutputStream to get the easy println methods.
                ServletOutputStream sos = (ServletOutputStream) output;
                // Copy multi part range.
                for (Range r : ranges) {
                    // Add multipart boundary and header fields for every range.
                    sos.println();
                    sos.println("--" + MULTIPART_BOUNDARY);
                    sos.println("Content-Type: " + contentType);
                    sos.println("Content-Range: bytes " + r.start + "-" + r.end + "/" + r.total);
                    // Copy single part range of multi part range.
                    copy(pdri, output, r.start, r.length, request);
                }
                // End with multipart boundary.
                sos.println();
                sos.println("--" + MULTIPART_BOUNDARY + "--");
            }
        }
    } finally {
        // Gently close streams.
        close(output);
        if (in != null) {
            in.close();
        }
        long elapsed = System.currentTimeMillis() - startTime;
        if (elapsed <= 0) {
            elapsed = 1;
        }
        LogicalDataWrapped lwd = Catalogue.logicalDataCache.get(fileUID);
        if (lwd != null) {
            double speed = ((lwd.getLogicalData().getLength() * 8.0) * 1000.0) / (elapsed * 1000.0);
            Double oldSpeed = Catalogue.weightPDRIMap.get(pdri.getHost());
            if (oldSpeed == null) {
                oldSpeed = speed;
            }
            Integer numOfGets = numOfGetsMap.get(pdri.getHost());
            if (numOfGets == null) {
                numOfGets = 1;
            }
            double averagre = (speed + oldSpeed) / (double) numOfGets;
            numOfGetsMap.put(pdri.getHost(), numOfGets++);
            Catalogue.weightPDRIMap.put(pdri.getHost(), averagre);
            Stats stats = new Stats();
            stats.setSource(request.getLocalAddr());
            stats.setDestination(request.getRemoteAddr());
            stats.setSpeed(speed);
            stats.setSize(Catalogue.logicalDataCache.get(fileUID).getLogicalData().getLength());
            cat.setSpeed(stats);
            String speedMsg = "Source: " + request.getLocalAddr() + " Destination: " + request.getRemoteAddr() + " Tx_Speed: " + speed + " Kbites/sec Tx_Size: " + Catalogue.logicalDataCache.get(fileUID).getLogicalData().getLength() + " bytes";
            Logger.getLogger(WorkerServlet.class.getName()).log(Level.INFO, speedMsg);
            String averageSpeedMsg = "Average speed: Source: " + pdri.getHost() + " Destination: " + request.getLocalAddr() + " Rx_Speed: " + averagre + " Kbites/sec Rx_Size: " + Catalogue.logicalDataCache.get(fileUID).getLogicalData().getLength() + " bytes";
            if (Util.sendStats()) {
                stats.setSource(request.getLocalAddr());
                stats.setDestination(request.getRemoteAddr());
                stats.setSpeed(speed);
                stats.setSize(Catalogue.logicalDataCache.get(fileUID).getLogicalData().getLength());
                cat.setSpeed(stats);
            }
            Logger.getLogger(WorkerServlet.class.getName()).log(Level.INFO, averageSpeedMsg);
        }
    }
}
Also used : Path(io.milton.common.Path) ServletOutputStream(javax.servlet.ServletOutputStream) GZIPOutputStream(java.util.zip.GZIPOutputStream) ServletOutputStream(javax.servlet.ServletOutputStream) TeeOutputStream(org.apache.commons.io.output.TeeOutputStream) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) ArrayList(java.util.ArrayList) LogicalDataWrapped(nl.uva.cs.lobcder.rest.wrappers.LogicalDataWrapped) PDRI(nl.uva.cs.lobcder.resources.PDRI) LogicalData(nl.uva.cs.lobcder.resources.LogicalData) GZIPOutputStream(java.util.zip.GZIPOutputStream) Stats(nl.uva.cs.lobcder.rest.wrappers.Stats)

Example 45 with LogicalData

use of nl.uva.cs.lobcder.resources.LogicalData in project lobcder by skoulouzis.

the class PathReservationService method request.

@Path("{commID}/request/")
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public ReservationInfo request(@PathParam("commID") String communicationID) throws MalformedURLException, IOException {
    // rest/reservation/5455/request/?dataPath=/sbuiifv/dsudsuds&storageSiteHost=sps1&storageSiteHost=sps2&storageSiteHost=sps3
    MyPrincipal mp = (MyPrincipal) request.getAttribute("myprincipal");
    MultivaluedMap<String, String> queryParameters = info.getQueryParameters();
    if (mp.getRoles().contains("planner") || mp.isAdmin() && queryParameters != null && !queryParameters.isEmpty()) {
        String dataName = queryParameters.getFirst("dataName");
        if (dataName != null && dataName.length() > 0) {
            List<String> storageList = queryParameters.get("storageSiteHost");
            String storageSiteHost = null;
            int index = -1;
            if (storageList != null && storageList.size() > 0) {
                storageSiteHost = getStorageSiteHost(storageList);
                index = storageList.indexOf(storageSiteHost);
            } else {
            }
            LogicalData ld;
            Permissions p = null;
            try (Connection cn = getCatalogue().getConnection()) {
                // -----------------THIS IS TEMPORARY IT'S ONLY FOR THE DEMO!!!!!!!!!!
                String fileNameWithOutExt = FilenameUtils.removeExtension(dataName);
                fileNameWithOutExt += ".webm";
                List<LogicalData> ldList = getCatalogue().getLogicalDataByName(io.milton.common.Path.path(fileNameWithOutExt), cn);
                if (ldList == null || ldList.isEmpty()) {
                    ldList = getCatalogue().getLogicalDataByName(io.milton.common.Path.path(dataName), cn);
                }
                // --------------------------------------------------------------
                if (ldList == null || ldList.isEmpty()) {
                    Response.status(Response.Status.NOT_FOUND);
                    return null;
                }
                // Should be only one
                ld = ldList.get(0);
                if (ld != null) {
                    p = getCatalogue().getPermissions(ld.getUid(), ld.getOwner(), cn);
                }
            } catch (SQLException ex) {
                log.log(Level.SEVERE, null, ex);
                throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
            }
            // Integer alocationStrategy = Integer.valueOf(queryParameters.getFirst("allocationStrategy"));
            ReservationInfo info = new ReservationInfo();
            if (p != null && mp.canRead(p)) {
                info.setCommunicationID(communicationID);
                String workerURL = scheduleWorker(storageSiteHost, ld);
                info.setCommunicationID(communicationID);
                storageSiteHost = Network.replaceIP(storageSiteHost);
                info.setStorageHost(storageSiteHost);
                info.setStorageHostIndex(index);
                workerURL = Network.replaceIP(workerURL);
                info.setWorkerDataAccessURL(workerURL);
            }
            return info;
        }
    }
    return null;
}
Also used : LogicalData(nl.uva.cs.lobcder.resources.LogicalData) MyPrincipal(nl.uva.cs.lobcder.auth.MyPrincipal) WebApplicationException(javax.ws.rs.WebApplicationException) SQLException(java.sql.SQLException) ReservationInfo(nl.uva.cs.lobcder.rest.wrappers.ReservationInfo) Permissions(nl.uva.cs.lobcder.auth.Permissions) Connection(java.sql.Connection) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Aggregations

LogicalData (nl.uva.cs.lobcder.resources.LogicalData)71 Connection (java.sql.Connection)29 SQLException (java.sql.SQLException)29 Permissions (nl.uva.cs.lobcder.auth.Permissions)29 MyPrincipal (nl.uva.cs.lobcder.auth.MyPrincipal)20 PreparedStatement (java.sql.PreparedStatement)11 ResultSet (java.sql.ResultSet)10 Path (io.milton.common.Path)7 ArrayList (java.util.ArrayList)7 BadRequestException (io.milton.http.exceptions.BadRequestException)6 NotAuthorizedException (io.milton.http.exceptions.NotAuthorizedException)5 PDRIDescr (nl.uva.cs.lobcder.resources.PDRIDescr)5 ConflictException (io.milton.http.exceptions.ConflictException)4 URISyntaxException (java.net.URISyntaxException)4 Stack (java.util.Stack)4 Path (javax.ws.rs.Path)4 LogicalDataWrapped (nl.uva.cs.lobcder.rest.wrappers.LogicalDataWrapped)4 VRL (nl.uva.vlet.vrl.VRL)4 PreConditionFailedException (io.milton.http.exceptions.PreConditionFailedException)3 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)3