Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Adding MultiPrefer type to handle multiple Prefer headers
  • Loading branch information
ajs6f committed Oct 23, 2014
1 parent 671b991 commit 673fbc2
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 10 deletions.
@@ -0,0 +1,27 @@

package org.fcrepo.http.commons.domain;

import java.text.ParseException;
import java.util.Iterator;
import java.util.Set;

import javax.ws.rs.HeaderParam;

/**
* Aggregate information from multiple Prefer HTTP headers.
*
* @author ajs6f
*/
public class MultiPrefer {

Prefer kernel;

public MultiPrefer(@HeaderParam("Prefer") Set<Prefer> prefers) throws ParseException {
Iterator<Prefer> iprefers = prefers.iterator();
kernel = new Prefer(iprefers.next());
while (iprefers.hasNext()) {
kernel = new Prefer(kernel, iprefers.next());
}
}

}
Expand Up @@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.fcrepo.http.commons.domain;

import com.google.common.base.Optional;
Expand All @@ -25,6 +26,7 @@

/**
* JAX-RS HTTP parameter parser for the Prefer header
*
* @author cabeer
*/
public class Prefer {
Expand All @@ -37,12 +39,23 @@ public class Prefer {
* @param inputValue
* @throws ParseException
*/
public Prefer(final String inputValue) throws ParseException {
preferTags = HttpHeaderReader.readList(PREFER_CREATOR, inputValue);
public Prefer(final String header) throws ParseException {
preferTags = HttpHeaderReader.readList(PREFER_CREATOR, header);
}

public Prefer(final Prefer base) {
preferTags = base.preferTags;
}

public Prefer(final Prefer base, final Prefer additional) throws ParseException {
final List<PreferTag> basePreferTags = base.preferTags;
basePreferTags.addAll(additional.preferTags);
preferTags = basePreferTags;
}

/**
* Does the Prefer: header have a return tag
*
* @return true if the header has a return tag
*/
public Boolean hasReturn() {
Expand All @@ -51,6 +64,7 @@ public Boolean hasReturn() {

/**
* Does the Prefer: header have a return tag
*
* @return true if the header has a return tag
*/
public Boolean hasHandling() {
Expand All @@ -59,6 +73,7 @@ public Boolean hasHandling() {

/**
* Get the return tag, or a blank default, if none exists.
*
* @return return tag, or a blank default, if none exists
*/
public PreferTag getReturn() {
Expand All @@ -72,6 +87,7 @@ public PreferTag getReturn() {

/**
* Get the return tag, or a blank default, if none exists.
*
* @return return tag, or a blank default, if none exists
*/
public PreferTag getHandling() {
Expand All @@ -83,18 +99,18 @@ public PreferTag getHandling() {
return PreferTag.emptyTag();
}



private static final HttpHeaderReader.ListElementCreator<PreferTag> PREFER_CREATOR =
new HttpHeaderReader.ListElementCreator<PreferTag>() {
@Override
public PreferTag create(final HttpHeaderReader reader) throws ParseException {
return new PreferTag(reader);
}
};
new HttpHeaderReader.ListElementCreator<PreferTag>() {

@Override
public PreferTag create(final HttpHeaderReader reader) throws ParseException {
return new PreferTag(reader);
}
};

private static Predicate<PreferTag> getPreferTag(final String tagName) {
return new Predicate<PreferTag>() {

@Override
public boolean apply(final PreferTag tag) {
return tag.getTag().equals(tagName);
Expand Down

0 comments on commit 673fbc2

Please sign in to comment.