Author: veithen Date: Thu Sep 24 22:07:24 2015 New Revision: 1705175 URL: http://svn.apache.org/viewvc?rev=1705175&view=rev Log: Rewrite FOMHelper.getCategories using the core model API.
Added: webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/FOMExceptionTranslator.java (with props) webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/entry/ webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/entry/TestGetCategoriesByScheme.java (with props) webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/ webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/ webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/apache/ webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/apache/axiom/ webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/apache/axiom/ts/ webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/apache/axiom/ts/fom/ webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/apache/axiom/ts/fom/entry/ webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/apache/axiom/ts/fom/entry/categories.xml (with props) Modified: webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/util/FOMHelper.java webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/util/FOMList.java webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/FOMTestSuiteBuilder.java Added: webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/FOMExceptionTranslator.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/FOMExceptionTranslator.java?rev=1705175&view=auto ============================================================================== --- webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/FOMExceptionTranslator.java (added) +++ webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/FOMExceptionTranslator.java Thu Sep 24 22:07:24 2015 @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.axiom.fom; + +import org.apache.axiom.core.CoreModelException; +import org.apache.axiom.core.ExceptionTranslator; + +public final class FOMExceptionTranslator implements ExceptionTranslator { + public static final FOMExceptionTranslator INSTANCE = new FOMExceptionTranslator(); + + private FOMExceptionTranslator() {} + + public RuntimeException toUncheckedException(CoreModelException ex) { + return new RuntimeException(ex); + } +} Propchange: webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/FOMExceptionTranslator.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/util/FOMHelper.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/util/FOMHelper.java?rev=1705175&r1=1705174&r2=1705175&view=diff ============================================================================== --- webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/util/FOMHelper.java (original) +++ webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/util/FOMHelper.java Thu Sep 24 22:07:24 2015 @@ -25,14 +25,28 @@ import org.apache.abdera.model.Category; import org.apache.abdera.model.Element; import org.apache.abdera.model.Link; import org.apache.abdera.util.Constants; +import org.apache.axiom.core.Axis; +import org.apache.axiom.core.ElementMatcher; +import org.apache.axiom.fom.AbderaCategory; +import org.apache.axiom.fom.AbderaElement; +import org.apache.axiom.fom.FOMExceptionTranslator; +import org.apache.axiom.fom.Policies; import org.apache.axiom.util.UIDGenerator; @SuppressWarnings("unchecked") public class FOMHelper implements Constants { + private static final ElementMatcher<AbderaCategory> CATEGORY_BY_SCHEME = new ElementMatcher<AbderaCategory>() { + public boolean matches(AbderaCategory element, String namespaceURI, String name) { + String scheme = element.getAttributeValue(SCHEME); + return scheme != null && scheme.equals(name); + } + }; - public static List<Category> getCategories(Element element, String scheme) { - Iterator i = new FOMElementIterator(element, Category.class, SCHEME, scheme, null); - return new FOMList<Category>(i); + public static List<Category> getCategories(AbderaElement element, String scheme) { + // TODO: we should probably set detachPolicy to null + return new FOMList<Category>(element.coreGetElements( + Axis.CHILDREN, AbderaCategory.class, CATEGORY_BY_SCHEME, null, scheme, + FOMExceptionTranslator.INSTANCE, Policies.DETACH_POLICY)); } public static List<Link> getLinks(Element element, String rel) { Modified: webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/util/FOMList.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/util/FOMList.java?rev=1705175&r1=1705174&r2=1705175&view=diff ============================================================================== --- webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/util/FOMList.java (original) +++ webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/util/FOMList.java Thu Sep 24 22:07:24 2015 @@ -33,13 +33,12 @@ import java.util.ListIterator; * caller. This gives us a hybrid approach. We create an internal iterator, then create a List from that, the iterator * is consumed as the list is used. The List itself is unmodifiable. */ -@SuppressWarnings("unchecked") public class FOMList<T> extends java.util.AbstractCollection<T> implements List<T> { - private final Iterator<T> i; + private final Iterator<? extends T> i; private final List<T> buffer = new ArrayList<T>(); - public FOMList(Iterator<T> i) { + public FOMList(Iterator<? extends T> i) { this.i = i; } @@ -93,11 +92,11 @@ public class FOMList<T> extends java.uti throw new UnsupportedOperationException(); } - public boolean addAll(Collection c) { + public boolean addAll(Collection<? extends T> c) { throw new UnsupportedOperationException(); } - public boolean addAll(int index, Collection c) { + public boolean addAll(int index, Collection<? extends T> c) { throw new UnsupportedOperationException(); } @@ -110,7 +109,7 @@ public class FOMList<T> extends java.uti return buffer.contains(o); } - public boolean containsAll(Collection c) { + public boolean containsAll(Collection<?> c) { for (Object o : c) if (contains(o)) return true; @@ -148,11 +147,11 @@ public class FOMList<T> extends java.uti throw new UnsupportedOperationException(); } - public boolean removeAll(Collection c) { + public boolean removeAll(Collection<?> c) { throw new UnsupportedOperationException(); } - public boolean retainAll(Collection c) { + public boolean retainAll(Collection<?> c) { throw new UnsupportedOperationException(); } @@ -170,21 +169,21 @@ public class FOMList<T> extends java.uti return buffer.toArray(); } - public Object[] toArray(Object[] a) { + public <U> U[] toArray(U[] a) { buffer(-1); return buffer.toArray(a); } private class BufferIterator<M> implements ListIterator<M> { - private FOMList set = null; + private FOMList<M> set = null; private int counter = 0; - BufferIterator(FOMList set) { + BufferIterator(FOMList<M> set) { this.set = set; } - BufferIterator(FOMList set, int index) { + BufferIterator(FOMList<M> set, int index) { this.set = set; this.counter = index; } Modified: webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/FOMTestSuiteBuilder.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/FOMTestSuiteBuilder.java?rev=1705175&r1=1705174&r2=1705175&view=diff ============================================================================== --- webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/FOMTestSuiteBuilder.java (original) +++ webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/FOMTestSuiteBuilder.java Thu Sep 24 22:07:24 2015 @@ -41,5 +41,6 @@ public class FOMTestSuiteBuilder extends addTest(new org.apache.axiom.ts.fom.collection.TestSetAcceptRemove(abdera)); addTest(new org.apache.axiom.ts.fom.control.TestIsDraft(abdera)); addTest(new org.apache.axiom.ts.fom.control.TestSetUnsetDraft(abdera)); + addTest(new org.apache.axiom.ts.fom.entry.TestGetCategoriesByScheme(abdera)); } } Added: webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/entry/TestGetCategoriesByScheme.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/entry/TestGetCategoriesByScheme.java?rev=1705175&view=auto ============================================================================== --- webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/entry/TestGetCategoriesByScheme.java (added) +++ webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/entry/TestGetCategoriesByScheme.java Thu Sep 24 22:07:24 2015 @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.axiom.ts.fom.entry; + +import static com.google.common.truth.Truth.assertThat; + +import java.util.List; + +import org.apache.abdera.Abdera; +import org.apache.abdera.model.Category; +import org.apache.abdera.model.Document; +import org.apache.abdera.model.Entry; +import org.apache.axiom.ts.fom.AbderaTestCase; + +public class TestGetCategoriesByScheme extends AbderaTestCase { + public TestGetCategoriesByScheme(Abdera abdera) { + super(abdera); + } + + @Override + protected void runTest() throws Throwable { + Document<Entry> document = abdera.getParser().parse( + TestGetCategoriesByScheme.class.getResourceAsStream("categories.xml")); + List<Category> categories = document.getRoot().getCategories("http://www.example.org/"); + assertThat(categories).hasSize(2); + assertThat(categories.get(0).getTerm()).isEqualTo("term1"); + assertThat(categories.get(1).getTerm()).isEqualTo("term2"); + } +} Propchange: webservices/axiom/trunk/testing/fom-testsuite/src/main/java/org/apache/axiom/ts/fom/entry/TestGetCategoriesByScheme.java ------------------------------------------------------------------------------ svn:eol-style = native Added: webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/apache/axiom/ts/fom/entry/categories.xml URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/apache/axiom/ts/fom/entry/categories.xml?rev=1705175&view=auto ============================================================================== --- webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/apache/axiom/ts/fom/entry/categories.xml (added) +++ webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/apache/axiom/ts/fom/entry/categories.xml Thu Sep 24 22:07:24 2015 @@ -0,0 +1,26 @@ +<?xml version="1.0" ?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one + ~ or more contributor license agreements. See the NOTICE file + ~ distributed with this work for additional information + ~ regarding copyright ownership. The ASF licenses this file + ~ to you under the Apache License, Version 2.0 (the + ~ "License"); you may not use this file except in compliance + ~ with the License. You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, + ~ software distributed under the License is distributed on an + ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ~ KIND, either express or implied. See the License for the + ~ specific language governing permissions and limitations + ~ under the License. + --> +<entry xmlns="http://www.w3.org/2005/Atom"> + <id>urn:uuid:1225c695-dead-cafe-babe-80da344efa6a</id> + <category scheme="http://www.example.org/" term="term1"/> + <category term="other"/> + <category scheme="http://www.example.org/" term="term2"/> + <category scheme="urn:test" term="test"/> +</entry> Propchange: webservices/axiom/trunk/testing/fom-testsuite/src/main/resources/org/apache/axiom/ts/fom/entry/categories.xml ------------------------------------------------------------------------------ svn:eol-style = native