BioInfWeb - JPhyloIO / Source code / Show File - MatrixDataAdapterImpl.java

JPhyloIO subversion repository

sventon subversion web client - http://www.sventon.org
[show recent changes]
 
  Help
Rev: HEAD (1579) - https://secure.bioinfweb.info/Code/svn/JPhyloIO / trunk / demo / info.bioinfweb.jphyloio.demo.simplealignment / src / info / bioinfweb / jphyloio / demo / simplealignment / MatrixDataAdapterImpl.java
Show File - MatrixDataAdapterImpl.java  [show properties]
spinner
/*
 * JPhyloIO - Event based parsing and stream writing of multiple sequence alignment and tree formats. 
 * Copyright (C) 2015-2016  Ben Stöver, Sarah Wiechers
 * <http://bioinfweb.info/JPhyloIO>
 * 
 * This file 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 3 of the License, or
 * (at your option) any later version.
10   * 
11   * This file is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   * GNU Lesser General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Lesser General Public License
17   * along with this program. If not, see <http://www.gnu.org/licenses/>.
18   */
19  package info.bioinfweb.jphyloio.demo.simplealignment;
20 
21 
22  import info.bioinfweb.commons.collections.NumberedStringsIterator;
23  import info.bioinfweb.jphyloio.ReadWriteConstants;
24  import info.bioinfweb.jphyloio.ReadWriteParameterMap;
25  import info.bioinfweb.jphyloio.dataadapters.JPhyloIOEventReceiver;
26  import info.bioinfweb.jphyloio.dataadapters.MatrixDataAdapter;
27  import info.bioinfweb.jphyloio.dataadapters.implementations.NoCharDefsNoSetsMatrixDataAdapter;
28  import info.bioinfweb.jphyloio.events.LinkedLabeledIDEvent;
29  import info.bioinfweb.jphyloio.events.SequenceTokensEvent;
30  import info.bioinfweb.jphyloio.events.type.EventContentType;
31 
32  import java.io.IOException;
33  import java.util.Iterator;
34 
35 
36 
37  /**
38   * This application's implementation of {@link MatrixDataAdapter}. It provides the data stored in the application business model
39   * ({@link ApplicationModel}) to <i>JPhyloIO</i> writers.
40   * <p>
41   * Since this application does not handle any other data than alignments, no additional adapter implementations are necessary.
42   * 
43   * @author Ben St&ouml;ver
44   */
45  public class MatrixDataAdapterImpl extends NoCharDefsNoSetsMatrixDataAdapter implements MatrixDataAdapter {
46      /** A link to the application business model represented by this adapter. */
47      private ApplicationModel model;
48      
49      
50      /**
51       * Creates a new instance of this class.
52       * 
53       * @param model the application model containing the data to be represented by the new instance
54       */
55      public MatrixDataAdapterImpl(ApplicationModel model) {
56          super();
57          this.model = model;
58      }
59 
60 
61      /**
62       * Returns the alignment start event of the alignment to be written. It will carry the label that is
63       * stored in the application model represented by this adapter.
64       * 
65       * @return the start event
66       */
67      @Override
68      public LinkedLabeledIDEvent getStartEvent(ReadWriteParameterMap parameters) {
69          return new LinkedLabeledIDEvent(EventContentType.ALIGNMENT, "alignment", model.getLabel(), null);  
70                  // Since this application support only one alignment at a time, a static ID may be used.
71      }
72 
73 
74      @Override
75      public long getSequenceCount(ReadWriteParameterMap parameters) {
76          return model.size();
77      }
78 
79      
80      @Override
81      public long getColumnCount(ReadWriteParameterMap parameters) {
82          return -1;  // -1 as a return value means that sequences may differ in length. If sequences should be filled up with e.g. gaps 
83                      // to form an alignment, a concrete value should be returned here.
84      }
85 
86      
87      @Override
88      public boolean containsLongTokens(ReadWriteParameterMap parameters) {
89          return true;  // Since our application in principle supports tokens longer than one character, we always return true here. A
90                        // more advanced implementation could check here, if long tokens are really currently present.
91      }
92      
93 
94      @Override
95      public Iterator<String> getSequenceIDIterator(ReadWriteParameterMap parameters) {
96          // The sequence IDs used in this adapter will all start with a common prefix followed by the index the respective sequence has
97          // in the application business model.
98          
99          return new NumberedStringsIterator(ReadWriteConstants.DEFAULT_SEQUENCE_ID_PREFIX, model.size());
100      }
101      
102      
103      /**
104       * Extracts the index from a sequence ID. (Sequence IDs used by this adapter all start with a common prefix followed by the index 
105       * the respective sequence has in the application business model.
106       * 
107       * @param sequenceID the <i>JPhyloIO</i> sequence index
108       * @return the respective index in the application business model
109       */
110      private int sequenceIndexByID(String sequenceID) {
111          return NumberedStringsIterator.extractIntIndexFromString(sequenceID, ReadWriteConstants.DEFAULT_SEQUENCE_ID_PREFIX);
112      }
113      
114 
115      @Override
116      public LinkedLabeledIDEvent getSequenceStartEvent(ReadWriteParameterMap parameters, String sequenceID) {
117          return new LinkedLabeledIDEvent(EventContentType.SEQUENCE, sequenceID,
118                  model.getSequenceLabel(sequenceIndexByID(sequenceID)),  // The sequence label is fetched from the application model. 
119                  null);  // No linked OTU is specified.
120          // Note that this method does not check, whether the specified ID is valid. More advanced implementations could do this.
121      }
122      
123 
124      @Override
125      public long getSequenceLength(ReadWriteParameterMap parameters, String sequenceID) throws IllegalArgumentException {
126          return model.getSequenceTokens(sequenceIndexByID(sequenceID)).size();  // The sequence length is fetched from the application model.
127          // Note that this method does not check, whether the specified ID is valid. More advanced implementations could do this.
128      }
129      
130 
131      @Override
132      public void writeSequencePartContentData(ReadWriteParameterMap parameters, JPhyloIOEventReceiver receiver, String sequenceID, 
133              long startColumn,   long endColumn) throws IOException, IllegalArgumentException {
134          
135          receiver.add(new SequenceTokensEvent(  // Writes a sequence tokens event into the receiver.
136                  model.getSequenceTokens(sequenceIndexByID(sequenceID)).subList((int)startColumn, (int)endColumn)));
137          // Note that no range check is performed in the specified column indices. More advanced implementations catch such problems.
138      }
139  }


feed icon

sventon 2.5.1

Valid XHTML 1.0 Strict   CSS ist valide!
JPhyloIO icon
bioinfweb RSS feed JPhyloIO on ResearchGate bioinfweb on twitter JPhyloIO on GitHub

JPhyloIO poster ECCB 2016 Conference poster at ECCB Sep 2016

bioinfweb - Biology & Informatics Website