001: /**
002: * @see com.coldcore.coloradoftp.filter.DataFilterApplicator
003: */package com.coldcore.coloradoftp.filter.impl;
004:
005: import com.coldcore.coloradoftp.factory.ObjectFactory;
006: import com.coldcore.coloradoftp.factory.ObjectName;
007: import com.coldcore.coloradoftp.filter.DataFilter;
008: import com.coldcore.coloradoftp.filter.DataFilterApplicator;
009: import com.coldcore.coloradoftp.filter.DataFilterFactory;
010: import com.coldcore.coloradoftp.session.Session;
011: import com.coldcore.coloradoftp.session.SessionAttributeName;
012: import org.apache.log4j.Logger;
013:
014: import java.nio.channels.ReadableByteChannel;
015: import java.nio.channels.WritableByteChannel;
016:
017: public class GenericDataFilterApplicator implements
018: DataFilterApplicator {
019:
020: private static Logger log = Logger
021: .getLogger(GenericDataFilterApplicator.class);
022:
023: /** Load filter for TYPE
024: * @param session User session
025: * @return Data filter (never NULL)
026: */
027: protected DataFilter getTypeFilter(Session session) {
028: String type = (String) session
029: .getAttribute(SessionAttributeName.DATA_TYPE);
030: if (type == null)
031: type = "A";
032: DataFilterFactory factory = (DataFilterFactory) ObjectFactory
033: .getObject(ObjectName.TYPE_FILTER_FACTORY);
034: return factory.create(type);
035: }
036:
037: /** Load filter for MODE
038: * @param session User session
039: * @return Data filter (never NULL)
040: */
041: protected DataFilter getModeFilter(Session session) {
042: String mode = (String) session
043: .getAttribute(SessionAttributeName.DATA_MODE);
044: if (mode == null)
045: mode = "S";
046: DataFilterFactory factory = (DataFilterFactory) ObjectFactory
047: .getObject(ObjectName.MODE_FILTER_FACTORY);
048: return factory.create(mode);
049: }
050:
051: /** Load filter for STRUcture
052: * @param session User session
053: * @return Data filter (never NULL)
054: */
055: protected DataFilter getStruFilter(Session session) {
056: String stru = (String) session
057: .getAttribute(SessionAttributeName.DATA_STRUCTURE);
058: if (stru == null)
059: stru = "F";
060: DataFilterFactory factory = (DataFilterFactory) ObjectFactory
061: .getObject(ObjectName.STRU_FILTER_FACTORY);
062: return factory.create(stru);
063: }
064:
065: public ReadableByteChannel applyFilters(ReadableByteChannel rbc,
066: Session userSession) {
067: DataFilter filter = null;
068: DataFilter append;
069:
070: append = getStruFilter(userSession);
071: if (append != null) {
072: append.setChannel(filter == null ? rbc
073: : (ReadableByteChannel) filter);
074: filter = append;
075: log.debug("Applied STRU data filter: " + filter.getName());
076: }
077:
078: append = getTypeFilter(userSession);
079: if (append != null) {
080: append.setChannel(filter == null ? rbc
081: : (ReadableByteChannel) filter);
082: filter = append;
083: log.debug("Applied TYPE data filter: " + filter.getName());
084: }
085:
086: append = getModeFilter(userSession);
087: if (append != null) {
088: append.setChannel(filter == null ? rbc
089: : (ReadableByteChannel) filter);
090: filter = append;
091: log.debug("Applied MODE data filter: " + filter.getName());
092: }
093:
094: return filter == null ? rbc : filter;
095: }
096:
097: public WritableByteChannel applyFilters(WritableByteChannel wbc,
098: Session userSession) {
099: DataFilter filter = null;
100: DataFilter append;
101:
102: append = getStruFilter(userSession);
103: if (append != null) {
104: append.setChannel(filter == null ? wbc
105: : (WritableByteChannel) filter);
106: filter = append;
107: log.debug("Applied STRU data filter: " + filter.getName());
108: }
109:
110: append = getTypeFilter(userSession);
111: if (append != null) {
112: append.setChannel(filter == null ? wbc
113: : (WritableByteChannel) filter);
114: filter = append;
115: log.debug("Applied TYPE data filter: " + filter.getName());
116: }
117:
118: append = getModeFilter(userSession);
119: if (append != null) {
120: append.setChannel(filter == null ? wbc
121: : (WritableByteChannel) filter);
122: filter = append;
123: log.debug("Applied MODE data filter: " + filter.getName());
124: }
125:
126: return filter == null ? wbc : filter;
127: }
128: }
|