Changeset 5498


Ignore:
Timestamp:
07/30/14 09:32:22 (10 years ago)
Author:
Twan Goosen
Message:

Updated PidWriterImpl?. Refs #596

File:
1 edited

Legend:

Unmodified
Added
Removed
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/de/uni_leipzig/asv/clarin/webservices/pidservices2/impl/PidWriterImpl.java

    r5497 r5498  
    2828 *
    2929 * @author Thomas Eckart
     30 * @author Twan Goosen
    3031 */
    3132public class PidWriterImpl implements PidWriter {
    3233
    3334    private final static Logger LOG = LoggerFactory.getLogger(PidWriterImpl.class);
     35    public static final Pattern PID_INPUT_PATTERN = Pattern.compile("^[0-9A-z-]+$");
    3436    private static final Pattern PID_OUTPUT_PATTERN = Pattern.compile(".*location</dt><dd><a href=\"([0-9A-z-]+)\">.*");
    3537
     38    /**
     39     *
     40     * @param configuration
     41     * @param fieldMap
     42     * @param pid PID to be created, must match {@link #PID_INPUT_PATTERN}
     43     * @return
     44     * @throws HttpException if the PID could not be created, for instance
     45     * because the requested PID already exists
     46     * @throws IllegalArgumentException if the provided PID does not match
     47     * {@link #PID_INPUT_PATTERN}
     48     */
    3649    @Override
    3750    public String registerNewPID(final Configuration configuration, Map<HandleField, String> fieldMap, String pid)
    38             throws HttpException {
     51            throws HttpException, IllegalArgumentException {
    3952        LOG.debug("Try to create handle {} at {} with values: {}", pid, configuration.getServiceBaseURL(), fieldMap);
    4053
     54        // validate the requested PID
     55        if (!PID_INPUT_PATTERN.matcher(pid).matches()) {
     56            throw new IllegalArgumentException(pid);
     57        }
     58
     59        // adding the PID to the request URL
    4160        final String baseUrl = String.format("%s%s/%s",
    4261                configuration.getServiceBaseURL(), configuration.getHandlePrefix(), pid);
    43         final WebResource.Builder resourceBuilder = createResourceBuilder(configuration, baseUrl);
     62        final WebResource.Builder resourceBuilder = createResourceBuilderForNewPID(configuration, baseUrl);
    4463
    4564        final JSONArray jsonArray = createJSONArray(fieldMap);
    4665        final ClientResponse response = resourceBuilder
     66                // this header will tell the server to fail if the requested PID already exists
    4767                .header("If-None-Match", "*")
     68                // PUT the handle at the specified location
    4869                .put(ClientResponse.class, jsonArray.toString());
    4970        return processCreateResponse(response, configuration);
     
    5677
    5778        final String baseUrl = configuration.getServiceBaseURL() + configuration.getHandlePrefix();
    58         final WebResource.Builder resourceBuilder = createResourceBuilder(configuration, baseUrl);
     79        final WebResource.Builder resourceBuilder = createResourceBuilderForNewPID(configuration, baseUrl);
    5980
    6081        final JSONArray jsonArray = createJSONArray(fieldMap);
    6182        final ClientResponse response = resourceBuilder
     83                // POST the new handle definition to the handles resource
    6284                .post(ClientResponse.class, jsonArray.toString());
    6385        return processCreateResponse(response, configuration);
    6486    }
    6587
    66     private WebResource.Builder createResourceBuilder(final Configuration configuration, final String baseUrl) {
     88    private WebResource.Builder createResourceBuilderForNewPID(final Configuration configuration, final String baseUrl) {
    6789        final Client client = Client.create();
    6890        client.addFilter(new HTTPBasicAuthFilter(configuration.getUser(), configuration.getPassword()));
    69         final WebResource.Builder resourceBuilder = client.resource(baseUrl).accept("application/json").type("application/json");
     91        // TODO: request JSON ("application/json") as soon as GWDG respects that accept header
     92        final WebResource.Builder resourceBuilder = client.resource(baseUrl).accept("application/xhtml+xml").type("application/json");
    7093        return resourceBuilder;
    7194    }
     
    7699        }
    77100
    78         // TODO CHANGE this ASAP, when GWDG respects accept header
     101        // TODO CHANGE this to JSON processing ASAP, when GWDG respects accept header
    79102        String responseString = response.getEntity(String.class).trim().replaceAll("\n", "");
    80103        Matcher matcher = PID_OUTPUT_PATTERN.matcher(responseString);
Note: See TracChangeset for help on using the changeset viewer.