[okapi] push by jhargrav...@gmail.com - yet another refactor of the subfilter design - this time using an... on 2012-03-02 18:33 GMT

0 views
Skip to first unread message

ok...@googlecode.com

unread,
Mar 2, 2012, 1:33:48 PM3/2/12
to okapi-...@googlegroups.com
Revision: 6b42bf39162c
Author: Jim Hargrave <hargr...@ldschurch.org>
Date: Fri Mar 2 10:32:03 2012
Log: yet another refactor of the subfilter design - this time using an
adapter pattern - start clean with a fresh branch of master
http://code.google.com/p/okapi/source/detail?r=6b42bf39162c

Added:

/okapi/core/src/main/java/net/sf/okapi/common/filters/AbstractSubFilterAdapter.java
/okapi/core/src/main/java/net/sf/okapi/common/filters/FilterState.java
Deleted:
/okapi/core/src/main/java/net/sf/okapi/common/filters/SubFilter.java
Modified:
/okapi/core/src/main/java/net/sf/okapi/common/filters/AbstractFilter.java
/okapi/core/src/main/java/net/sf/okapi/common/filters/IFilter.java

/okapi/filters/abstractmarkup/src/main/java/net/sf/okapi/filters/abstractmarkup/AbstractMarkupFilter.java

=======================================
--- /dev/null
+++
/okapi/core/src/main/java/net/sf/okapi/common/filters/AbstractSubFilterAdapter.java
Fri Mar 2 10:32:03 2012
@@ -0,0 +1,116 @@
+package net.sf.okapi.common.filters;
+import java.util.List;
+
+import net.sf.okapi.common.Event;
+import net.sf.okapi.common.IParameters;
+import net.sf.okapi.common.encoder.EncoderManager;
+import net.sf.okapi.common.filterwriter.IFilterWriter;
+import net.sf.okapi.common.resource.RawDocument;
+import net.sf.okapi.common.skeleton.ISkeletonWriter;
+
+/**
+ * Adapter that converts any {@link IFilter} into a subfilter (a filter
called from another {@link IFilter}).
+ * Specific implementations can implement this class and override any
needed methods to transform {@link Event}s
+ * as they are produced
+ *
+ * @author Jim Hargrave
+ *
+ */
+public abstract class AbstractSubFilterAdapter implements IFilter {
+ IFilter filter;
+ FilterState state;
+ SubFilterEventConverter converter;
+
+ public AbstractSubFilterAdapter(IFilter filter, FilterState state) {
+ this.filter = filter;
+ this.state = state;
+ this.converter = new SubFilterEventConverter(state.getParentId(),
+ state.getStartSkeleton(), state.getEndSkeleton());
+ }
+
+ @Override
+ public String getName() {
+ return filter.getName();
+ }
+
+ @Override
+ public String getDisplayName() {
+ return filter.getDisplayName();
+ }
+
+ @Override
+ public void open(RawDocument input) {
+ filter.open(input);
+ }
+
+ @Override
+ public void open(RawDocument input, boolean generateSkeleton) {
+ filter.open(input, generateSkeleton);
+ }
+
+ @Override
+ public void close() {
+ filter.close();
+ }
+
+ @Override
+ public boolean hasNext() {
+ return filter.hasNext();
+ }
+
+ @Override
+ public Event next() {
+ Event e = filter.next();
+ return converter.convertEvent(e);
+ }
+
+ @Override
+ public void cancel() {
+ filter.cancel();
+ }
+
+ @Override
+ public IParameters getParameters() {
+ return filter.getParameters();
+ }
+
+ @Override
+ public void setParameters(IParameters params) {
+ filter.setParameters(params);
+ }
+
+ @Override
+ public void setFilterConfigurationMapper(IFilterConfigurationMapper
fcMapper) {
+ filter.setFilterConfigurationMapper(fcMapper);
+ }
+
+ @Override
+ public ISkeletonWriter createSkeletonWriter() {
+ return filter.createSkeletonWriter();
+ }
+
+ @Override
+ public IFilterWriter createFilterWriter() {
+ return filter.createFilterWriter();
+ }
+
+ @Override
+ public EncoderManager getEncoderManager() {
+ return filter.getEncoderManager();
+ }
+
+ @Override
+ public String getMimeType() {
+ return filter.getMimeType();
+ }
+
+ @Override
+ public List<FilterConfiguration> getConfigurations() {
+ return filter.getConfigurations();
+ }
+
+ @Override
+ public boolean isSubfilter() {
+ return true;
+ }
+}
=======================================
--- /dev/null
+++ /okapi/core/src/main/java/net/sf/okapi/common/filters/FilterState.java
Fri Mar 2 10:32:03 2012
@@ -0,0 +1,75 @@
+package net.sf.okapi.common.filters;
+
+import net.sf.okapi.common.ISkeleton;
+
+/**
+ *
+ * Placeholder class until we figure what state info we need to pass to the
+ * subfilters
+ *
+ * @author Jim Hargrave
+ *
+ */
+public class FilterState {
+ public enum FILTER_STATE {
+ INSIDE_TAG, INSIDE_TEXTUNIT, INSIDE_ATTRIBUTE
+ }
+
+ private FILTER_STATE state;
+ private String parentId;
+ private String parentTextUnitName;
+ private ISkeleton startSkeleton;
+ private ISkeleton endSkeleton;
+
+ public FilterState(FILTER_STATE state, String parentId,
+ ISkeleton startSkeleton, ISkeleton endSkeleton) {
+ this.state = state;
+ this.parentId = parentId;
+ this.startSkeleton = startSkeleton;
+ this.endSkeleton = endSkeleton;
+ }
+
+ public FilterState() {
+ this.state = FILTER_STATE.INSIDE_TEXTUNIT;
+ }
+
+ public FILTER_STATE getState() {
+ return state;
+ }
+
+ public void setState(FILTER_STATE state) {
+ this.state = state;
+ }
+
+ public String getParentId() {
+ return parentId;
+ }
+
+ public void setParentId(String parentId) {
+ this.parentId = parentId;
+ }
+
+ public String getParentTextUnitName() {
+ return parentTextUnitName;
+ }
+
+ public void setParentTextUnitName(String parentTextUnitName) {
+ this.parentTextUnitName = parentTextUnitName;
+ }
+
+ public ISkeleton getStartSkeleton() {
+ return startSkeleton;
+ }
+
+ public void setStartSkeleton(ISkeleton startSkeleton) {
+ this.startSkeleton = startSkeleton;
+ }
+
+ public ISkeleton getEndSkeleton() {
+ return endSkeleton;
+ }
+
+ public void setEndSkeleton(ISkeleton endSkeleton) {
+ this.endSkeleton = endSkeleton;
+ }
+}
=======================================
--- /okapi/core/src/main/java/net/sf/okapi/common/filters/SubFilter.java
Fri Nov 26 10:58:26 2010
+++ /dev/null
@@ -1,34 +0,0 @@
-/*===========================================================================
- Copyright (C) 2010 by the Okapi Framework contributors
------------------------------------------------------------------------------
- This library is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 2.1 of the License, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
- General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with this library; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- See also the full LGPL text here: http://www.gnu.org/copyleft/lesser.html
-===========================================================================*/
-
-package net.sf.okapi.common.filters;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation for IFilter variables used as sub-filter.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.FIELD, ElementType.LOCAL_VARIABLE})
-public @interface SubFilter {
-}
=======================================
---
/okapi/core/src/main/java/net/sf/okapi/common/filters/AbstractFilter.java
Sun Sep 18 14:17:37 2011
+++
/okapi/core/src/main/java/net/sf/okapi/common/filters/AbstractFilter.java
Fri Mar 2 10:32:03 2012
@@ -422,10 +422,6 @@
public IdGenerator getDocumentId() {
return documentId;
}
-
- public boolean isSubFilter() {
- return this.getClass().isAnnotationPresent(SubFilter.class);
- }

public String getParentId() {
return parentId;
@@ -434,4 +430,9 @@
public void setParentId(String parentId) {
this.parentId = parentId;
}
-}
+
+ @Override
+ public boolean isSubfilter() {
+ return false;
+ }
+}
=======================================
--- /okapi/core/src/main/java/net/sf/okapi/common/filters/IFilter.java Sat
Dec 11 05:50:01 2010
+++ /okapi/core/src/main/java/net/sf/okapi/common/filters/IFilter.java Fri
Mar 2 10:32:03 2012
@@ -161,4 +161,9 @@
*/
public List<FilterConfiguration> getConfigurations();

-}
+ /**
+ * is this filter configured as a subfilter?
+ * @return true if subfilter, false otherwise
+ */
+ public boolean isSubfilter();
+}
=======================================
---
/okapi/filters/abstractmarkup/src/main/java/net/sf/okapi/filters/abstractmarkup/AbstractMarkupFilter.java
Wed Dec 7 14:05:48 2011
+++
/okapi/filters/abstractmarkup/src/main/java/net/sf/okapi/filters/abstractmarkup/AbstractMarkupFilter.java
Fri Mar 2 10:32:03 2012
@@ -59,7 +59,6 @@
import net.sf.okapi.common.filters.IFilter;
import net.sf.okapi.common.filters.PropertyTextUnitPlaceholder;
import
net.sf.okapi.common.filters.PropertyTextUnitPlaceholder.PlaceholderAccessType;
-import net.sf.okapi.common.filters.SubFilter;
import net.sf.okapi.common.filters.SubFilterEventConverter;
import net.sf.okapi.common.LocaleId;
import net.sf.okapi.common.resource.Code;
@@ -101,10 +100,8 @@
private boolean hasBOM;
private EventBuilder eventBuilder;
private RawDocument currentRawDocument;
- private ExtractionRuleState ruleState;
- @SubFilter() // make this IFilter a subfilter
- private IFilter cdataSubfilter;
- @SubFilter() // make this IFilter a subfilter
+ private ExtractionRuleState ruleState;
+ private IFilter cdataSubfilter;
private IFilter pcdataSubfilter;
private String currentId;
private boolean documentEncoding;
@@ -375,10 +372,10 @@
protected void startFilter() {
// order of execution matters
if (eventBuilder == null) {
- eventBuilder = new AbstractMarkupEventBuilder(getParentId(),
isSubFilter());
+ eventBuilder = new AbstractMarkupEventBuilder(getParentId(),
isSubfilter());
eventBuilder.setMimeType(getMimeType());
} else {
- eventBuilder.reset(getParentId(), isSubFilter());
+ eventBuilder.reset(getParentId(), isSubfilter());
}

eventBuilder.addFilterEvent(createStartFilterEvent());

Reply all
Reply to author
Forward
0 new messages