Changeset 30568 in osm for applications/editors


Ignore:
Timestamp:
2014-08-06T19:33:57+02:00 (10 years ago)
Author:
donvip
Message:

[josm_opendata] add more unit tests, fix Java 7 warnings

Location:
applications/editors/josm/plugins/opendata
Files:
13 added
49 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/BindInfo.java

    r29679 r30568  
    55
    66public class BindInfo {
    7     public RecordVector<CoderStreamsInfo> Coders = new RecordVector<CoderStreamsInfo>();
    8     public RecordVector<BindPair> BindPairs = new RecordVector<BindPair>();
     7    public RecordVector<CoderStreamsInfo> Coders = new RecordVector<>();
     8    public RecordVector<BindPair> BindPairs = new RecordVector<>();
    99    public IntVector InStreams = new IntVector();
    1010    public IntVector OutStreams = new IntVector();
  • applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/CoderMixer2ST.java

    r29681 r30568  
    2020   
    2121    BindInfo _bindInfo = new BindInfo();
    22     ObjectVector<STCoderInfo> _coders = new ObjectVector<STCoderInfo>();
     22    ObjectVector<STCoderInfo> _coders = new ObjectVector<>();
    2323   
    2424    public CoderMixer2ST() {
     
    202202        CoderInfo mainCoder = _coders.get(_mainCoderIndex);
    203203       
    204         ObjectVector< java.io.InputStream > seqInStreams = new ObjectVector< java.io.InputStream >(); // CObjectVector< CMyComPtr<ISequentialInStream> >
    205         ObjectVector< java.io.OutputStream > seqOutStreams = new ObjectVector< java.io.OutputStream >(); // CObjectVector< CMyComPtr<ISequentialOutStream> >
     204        ObjectVector< java.io.InputStream > seqInStreams = new ObjectVector< >(); // CObjectVector< CMyComPtr<ISequentialInStream> >
     205        ObjectVector< java.io.OutputStream > seqOutStreams = new ObjectVector< >(); // CObjectVector< CMyComPtr<ISequentialOutStream> >
    206206        int startInIndex = _bindInfo.GetCoderInStreamIndex(_mainCoderIndex);
    207207        int startOutIndex = _bindInfo.GetCoderOutStreamIndex(_mainCoderIndex);
     
    220220            seqOutStreams.add(seqOutStream);
    221221        }
    222         RecordVector< java.io.InputStream > seqInStreamsSpec = new RecordVector< java.io.InputStream >();
    223         RecordVector< java.io.OutputStream > seqOutStreamsSpec = new RecordVector< java.io.OutputStream >();
     222        RecordVector< java.io.InputStream > seqInStreamsSpec = new RecordVector< >();
     223        RecordVector< java.io.OutputStream > seqOutStreamsSpec = new RecordVector< >();
    224224        for (i = 0; i < mainCoder.NumInStreams; i++)
    225225            seqInStreamsSpec.add(seqInStreams.get(i));
  • applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/FilterCoder.java

    r29681 r30568  
    44import java.io.IOException;
    55
    6 import org.j7zip.SevenZip.HRESULT;
    76import org.j7zip.SevenZip.ICompressCoder;
    87import org.j7zip.SevenZip.ICompressSetOutStream;
  • applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/ArchiveDatabase.java

    r29679 r30568  
    1010    public BoolVector PackCRCsDefined = new BoolVector();
    1111    public IntVector PackCRCs = new IntVector();
    12     public ObjectVector<Folder> Folders = new ObjectVector<Folder>();
     12    public ObjectVector<Folder> Folders = new ObjectVector<>();
    1313    public IntVector NumUnPackStreamsVector = new IntVector();
    14     public ObjectVector<FileItem> Files = new ObjectVector<FileItem>();
     14    public ObjectVector<FileItem> Files = new ObjectVector<>();
    1515   
    1616    void Clear() {
  • applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/BindInfoEx.java

    r29679 r30568  
    77class BindInfoEx extends BindInfo {
    88   
    9     RecordVector<MethodID> CoderMethodIDs = new RecordVector<MethodID>();
     9    RecordVector<MethodID> CoderMethodIDs = new RecordVector<>();
    1010   
    1111    public void Clear() {
  • applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/CoderInfo.java

    r29679 r30568  
    77    int NumInStreams;
    88    int NumOutStreams;
    9     public ObjectVector<AltCoderInfo> AltCoders = new org.j7zip.Common.ObjectVector<AltCoderInfo>();
     9    public ObjectVector<AltCoderInfo> AltCoders = new org.j7zip.Common.ObjectVector<>();
    1010   
    1111    boolean IsSimpleCoder() { return (NumInStreams == 1) && (NumOutStreams == 1); }
  • applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Decoder.java

    r29681 r30568  
    4545       
    4646        _mixerCoder = null;
    47         _decoders = new ObjectVector<Object>();
     47        _decoders = new ObjectVector<>();
    4848       
    4949        // #ifndef EXCLUDE_COM -- LoadMethodMap();
     
    117117       
    118118       
    119         ObjectVector<java.io.InputStream> inStreams = new ObjectVector<java.io.InputStream>(); // CObjectVector< CMyComPtr<ISequentialInStream> >
     119        ObjectVector<java.io.InputStream> inStreams = new ObjectVector<>(); // CObjectVector< CMyComPtr<ISequentialInStream> >
    120120       
    121121        LockedInStream lockedInStream = new LockedInStream();
     
    357357        if (numCoders == 0)
    358358            return 0;
    359         RecordVector<java.io.InputStream> inStreamPointers = new RecordVector<java.io.InputStream>(); // CRecordVector<ISequentialInStream *>
     359        RecordVector<java.io.InputStream> inStreamPointers = new RecordVector<>(); // CRecordVector<ISequentialInStream *>
    360360        inStreamPointers.Reserve(inStreams.size());
    361361        for (i = 0; i < inStreams.size(); i++)
    362362            inStreamPointers.add(inStreams.get(i));
    363363
    364         RecordVector<java.io.OutputStream> outStreamPointer = new RecordVector<java.io.OutputStream>();
     364        RecordVector<java.io.OutputStream> outStreamPointer = new RecordVector<>();
    365365        outStreamPointer.add(outStream);
    366366        return _mixerCoder.Code(
  • applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Folder.java

    r29679 r30568  
    1111
    1212class Folder {
    13     public RecordVector<CoderInfo> Coders = new RecordVector<CoderInfo>();
    14     RecordVector<BindPair> BindPairs = new RecordVector<BindPair>();
     13    public RecordVector<CoderInfo> Coders = new RecordVector<>();
     14    RecordVector<BindPair> BindPairs = new RecordVector<>();
    1515    IntVector PackStreams = new IntVector();
    1616    LongVector UnPackSizes = new LongVector();
  • applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Handler.java

    r29681 r30568  
    8484            return HRESULT.S_OK;
    8585       
    86         ObjectVector<ExtractFolderInfo> extractFolderInfoVector = new ObjectVector<ExtractFolderInfo>();
     86        ObjectVector<ExtractFolderInfo> extractFolderInfoVector = new ObjectVector<>();
    8787        for(int ii = 0; ii < numItems; ii++) {
    8888            int ref2Index = allFilesMode ? ii : indices[ii];
  • applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/InArchive.java

    r29681 r30568  
    3232   
    3333    public InArchive() {
    34         _inByteVector = new ObjectVector<InByte2>();
     34        _inByteVector = new ObjectVector<>();
    3535        _inByteBack = new InByte2();
    3636    }
     
    710710        IntVector packCRCs = new IntVector(); // CRecordVector<UInt32> packCRCs;
    711711       
    712         ObjectVector<Folder> folders = new ObjectVector<Folder>();
     712        ObjectVector<Folder> folders = new ObjectVector<>();
    713713       
    714714        IntVector numUnPackStreamsInFolders = new IntVector();
     
    823823        streamSwitch.Set(this, buffer2);
    824824       
    825         ObjectVector<ByteBuffer> dataVector = new ObjectVector<ByteBuffer>(); // CObjectVector<CByteBuffer> dataVector;
     825        ObjectVector<ByteBuffer> dataVector = new ObjectVector<>(); // CObjectVector<CByteBuffer> dataVector;
    826826       
    827827        for (;;) {
     
    863863        }
    864864       
    865         ObjectVector<ByteBuffer> dataVector = new ObjectVector<ByteBuffer>();
     865        ObjectVector<ByteBuffer> dataVector = new ObjectVector<>();
    866866       
    867867        if (type == NID.kAdditionalStreamsInfo) {
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ChildCreator.java

    r28000 r30568  
    3737            throw new NullPointerException("null content");
    3838        this.content = content;
    39         this.elemsOrder = new ArrayList<Element>(children);
     39        this.elemsOrder = new ArrayList<>(children);
    4040    }
    4141
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ImmutableDocStyledNode.java

    r28000 r30568  
    2525
    2626    private static final Set<Document> getDocuments(final ODPackage pkg) {
    27         final Set<Document> res = new HashSet<Document>();
     27        final Set<Document> res = new HashSet<>();
    2828        for (final String entry : pkg.getEntries()) {
    2929            final ODPackageEntry e = pkg.getEntry(entry);
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODMeta.java

    r28000 r30568  
    4242    private static final Map<XMLVersion, List<Element>> ELEMS_ORDER;
    4343    static {
    44         ELEMS_ORDER = new HashMap<XMLVersion, List<Element>>(2);
     44        ELEMS_ORDER = new HashMap<>(2);
    4545        ELEMS_ORDER.put(XMLVersion.getOOo(), createChildren(XMLVersion.getOOo()));
    4646        ELEMS_ORDER.put(XMLVersion.getOD(), createChildren(XMLVersion.getOD()));
     
    5050        final Namespace meta = ins.getMETA();
    5151        final Namespace dc = ins.getNS("dc");
    52         final List<Element> res = new ArrayList<Element>(8);
     52        final List<Element> res = new ArrayList<>(8);
    5353        res.add(new Element("generator", meta));
    5454        res.add(new Element("title", dc));
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODPackage.java

    r28000 r30568  
    3737    private static final Set<String> subdocNames;
    3838    static {
    39         subdocNames = new HashSet<String>();
     39        subdocNames = new HashSet<>();
    4040        // section 2.1 of OpenDocument-v1.1-os.odt
    4141        subdocNames.add("content.xml");
     
    4949
    5050    public ODPackage() {
    51         this.files = new HashMap<String, ODPackageEntry>();
     51        this.files = new HashMap<>();
    5252        this.file = null;
    5353    }
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODSingleXMLDocument.java

    r28000 r30568  
    2828    final static Set<String> DONT_PREFIX;
    2929    static {
    30         DONT_PREFIX = new HashSet<String>();
     30        DONT_PREFIX = new HashSet<>();
    3131        // don't touch to user fields and variables
    3232        // we want them to be the same across the document
     
    5757    ODSingleXMLDocument(ODSingleXMLDocument doc, ODPackage p) {
    5858        super(doc);
    59         this.stylesNames = new HashSet<String>(doc.stylesNames);
    60         this.listStylesNames = new HashSet<String>(doc.listStylesNames);
     59        this.stylesNames = new HashSet<>(doc.stylesNames);
     60        this.listStylesNames = new HashSet<>(doc.listStylesNames);
    6161        this.pkg = p;
    6262        this.meta = ODMeta.create(this);
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODXMLDocument.java

    r28000 r30568  
    4141    private static final Map<XMLVersion, List<Element>> ELEMS_ORDER;
    4242    static {
    43         ELEMS_ORDER = new HashMap<XMLVersion, List<Element>>(2);
     43        ELEMS_ORDER = new HashMap<>(2);
    4444        ELEMS_ORDER.put(XMLVersion.getOOo(), createChildren(XMLVersion.getOOo()));
    4545        ELEMS_ORDER.put(XMLVersion.getOD(), createChildren(XMLVersion.getOD()));
     
    4848    private static final List<Element> createChildren(XMLVersion ins) {
    4949        final Namespace ns = ins.getOFFICE();
    50         final List<Element> res = new ArrayList<Element>(8);
     50        final List<Element> res = new ArrayList<>(8);
    5151        res.add(new Element("meta", ns));
    5252        res.add(new Element("settings", ns));
     
    6363    static private final Map<String, String> namePrefixes;
    6464    static {
    65         namePrefixes = new HashMap<String, String>();
     65        namePrefixes = new HashMap<>();
    6666        namePrefixes.put("table:table", "table");
    6767        namePrefixes.put("text:a", "office");
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleDesc.java

    r28000 r30568  
    6868        this.family = family;
    6969        this.baseName = baseName;
    70         this.refElements = new CollectionMap<String, String>();
     70        this.refElements = new CollectionMap<>();
    7171        // 4 since they are not common
    72         this.multiRefElements = new CollectionMap<String, String>(4);
     72        this.multiRefElements = new CollectionMap<>(4);
    7373    }
    7474
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleStyle.java

    r28000 r30568  
    3737    private static boolean descsLoaded = false;
    3838    static {
    39         family2Desc = new HashMap<XMLVersion, Map<String, StyleDesc<?>>>();
    40         class2Desc = new HashMap<XMLVersion, Map<Class<? extends StyleStyle>, StyleDesc<?>>>();
     39        family2Desc = new HashMap<>();
     40        class2Desc = new HashMap<>();
    4141        for (final XMLVersion v : XMLVersion.values()) {
    4242            family2Desc.put(v, new HashMap<String, StyleDesc<?>>());
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/XMLVersion.java

    r28000 r30568  
    8181
    8282    private XMLVersion(String name, Namespace manifest) {
    83         this.nss = new HashMap<String, Namespace>(16);
     83        this.nss = new HashMap<>(16);
    8484    }
    8585
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Cell.java

    r28000 r30568  
    136136     */
    137137    public String getTextValue(final boolean ooMode) {
    138         final List<String> ps = new ArrayList<String>();
     138        final List<String> ps = new ArrayList<>();
    139139        for (final Object o : this.getElement().getChildren()) {
    140140            final Element child = (Element) o;
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Row.java

    r28000 r30568  
    4444        this.parent = parent;
    4545        this.index = index;
    46         this.cells = new ArrayList<Cell<D>>();
     46        this.cells = new ArrayList<>();
    4747        for (final Element cellElem : this.getCellElements()) {
    4848            addCellElem(cellElem);
     
    5959
    6060    private void addCellElem(final Element cellElem) {
    61         final Cell<D> cell = new Cell<D>(this, cellElem);
     61        final Cell<D> cell = new Cell<>(this, cellElem);
    6262        this.cells.add(cell);
    6363
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/SpreadSheet.java

    r28000 r30568  
    4949
    5050        // map Sheet by XML elements so has not to depend on ordering or name
    51         this.sheets = new HashMap<Element, Sheet>();
     51        this.sheets = new HashMap<>();
    5252    }
    5353
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Table.java

    r28000 r30568  
    4444        super(parent, local, TableStyle.class);
    4545
    46         this.rows = new ArrayList<Row<D>>();
    47         this.cols = new ArrayList<Column<D>>();
     46        this.rows = new ArrayList<>();
     47        this.cols = new ArrayList<>();
    4848
    4949        this.readColumns();
     
    7171
    7272    private final void addCol(Element clone) {
    73         this.cols.add(new Column<D>(this, clone));
     73        this.cols.add(new Column<>(this, clone));
    7474    }
    7575
    7676    private Tuple2<List<Element>, Integer> flatten(boolean col) {
    77         final List<Element> res = new ArrayList<Element>();
     77        final List<Element> res = new ArrayList<>();
    7878        final Element header = this.getElement().getChild("table-header-" + getName(col) + "s", getTABLE());
    7979        if (header != null)
     
    128128
    129129    private synchronized void addRow(Element child) {
    130         this.rows.add(new Row<D>(this, child, this.rows.size()));
     130        this.rows.add(new Row<>(this, child, this.rows.size()));
    131131    }
    132132
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/io/SaxContentUnmarshaller.java

    r29298 r30568  
    4040
    4141    public SaxContentUnmarshaller() {
    42         this.stack = new Stack<Object>();
     42        this.stack = new Stack<>();
    4343    }
    4444
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/office/OfficeBody.java

    r28000 r30568  
    2424public class OfficeBody {
    2525
    26     private final List<OfficeSpreadsheet> officeSpreadsheets = new Vector<OfficeSpreadsheet>();
     26    private final List<OfficeSpreadsheet> officeSpreadsheets = new Vector<>();
    2727
    2828    public void addOfficeSpreadsheet(final OfficeSpreadsheet spread) {
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/office/OfficeSpreadsheet.java

    r28000 r30568  
    2222
    2323public class OfficeSpreadsheet {
    24     List<TableTable> tables = new Vector<TableTable>();
     24    List<TableTable> tables = new Vector<>();
    2525
    2626    public void addTable(final TableTable table) {
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/table/TableTable.java

    r28000 r30568  
    2525
    2626    // Une colonne ou ligne repeated est dupliquée dans la liste
    27     ArrayList<TableTableColumn> columns = new ArrayList<TableTableColumn>();
     27    ArrayList<TableTableColumn> columns = new ArrayList<>();
    2828
    2929    private int printStartCol = 0;
     
    3535    private int printStopRow = 0;
    3636
    37     ArrayList<TableTableRow> rows = new ArrayList<TableTableRow>();
     37    ArrayList<TableTableRow> rows = new ArrayList<>();
    3838
    3939    public void addColumn(final TableTableColumn col) {
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/table/TableTableRow.java

    r29298 r30568  
    2727    ArrayList<TableTableCell> allCells;
    2828
    29     Vector<TableTableCell> cells = new Vector<TableTableCell>();
     29    Vector<TableTableCell> cells = new Vector<>();
    3030
    3131    int id = 0;
     
    4747     */
    4848    void computeAllCells() {
    49         this.allCells = new ArrayList<TableTableCell>();
     49        this.allCells = new ArrayList<>();
    5050        for (int index = 0; index < this.cells.size(); index++) {
    5151            final TableTableCell c = this.cells.get(index);
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/text/TextP.java

    r28000 r30568  
    2424public class TextP {
    2525
    26     private final List<TextSpan> textSpans = new Vector<TextSpan>();
     26    private final List<TextSpan> textSpans = new Vector<>();
    2727
    2828    public void addTextSpan(final TextSpan p) {
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/FileUtils.java

    r28000 r30568  
    3131    private static final Map<String, String> ext2mime;
    3232    static {
    33         ext2mime = new HashMap<String, String>();
     33        ext2mime = new HashMap<>();
    3434        ext2mime.put(".xml", "text/xml");
    3535        ext2mime.put(".jpg", "image/jpeg");
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/StringUtils.java

    r28000 r30568  
    4747            super();
    4848            this.esc = esc;
    49             this.substitution = new LinkedHashMap<Character, Character>();
    50             this.inv = new HashMap<Character, Character>();
     49            this.substitution = new LinkedHashMap<>();
     50            this.inv = new HashMap<>();
    5151            this.add(esc, name);
    5252        }
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/Tuple2.java

    r28000 r30568  
    3131    // just to make the code shorter
    3232    public static final <A, B> Tuple2<A, B> create(A a, B b) {
    33         return new Tuple2<A, B>(a, b);
     33        return new Tuple2<>(a, b);
    3434    }
    3535
  • applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/cc/Transformer.java

    r28000 r30568  
    2121
    2222    public static final <N> ITransformer<N, N> nopTransformer() {
    23         return new ITransformerWrapper<N, N>(TransformerUtils.nopTransformer());
     23        return new ITransformerWrapper<>(TransformerUtils.nopTransformer());
    2424    }
    2525
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/NeptuneReader.java

    r30532 r30568  
    3939import neptune.TridentObjectType;
    4040
     41import org.openstreetmap.josm.Main;
    4142import org.openstreetmap.josm.data.coor.LatLon;
    4243import org.openstreetmap.josm.data.osm.DataSet;
     
    103104                                Validator validator = schema.newValidator();
    104105                                validator.validate(xmlFile);
    105                                 System.out.println(xmlFile.getSystemId() + " is valid");
     106                                Main.info(xmlFile.getSystemId() + " is valid");
    106107                                return true;
    107108                        } catch (SAXException e) {
    108                                 System.out.println(xmlFile.getSystemId() + " is NOT valid");
    109                                 System.out.println("Reason: " + e.getLocalizedMessage());
     109                                Main.error(xmlFile.getSystemId() + " is NOT valid");
     110                                Main.error("Reason: " + e.getLocalizedMessage());
    110111                        } catch (IOException e) {
    111                                 System.out.println(xmlFile.getSystemId() + " is NOT valid");
    112                                 System.out.println("Reason: " + e.getLocalizedMessage());
     112                            Main.error(xmlFile.getSystemId() + " is NOT valid");
     113                            Main.error("Reason: " + e.getLocalizedMessage());
    113114                        } finally {
    114115                                try {
     
    119120                        }
    120121                } catch (FileNotFoundException e) {
    121                         System.err.println(e.getMessage());
     122                    Main.error(e.getMessage());
    122123                }
    123124               
     
    317318                                                } else {
    318319                                                        // TODO
    319                                                         System.out.println("TODO: handle StopPoint "+childId);
     320                                                        Main.info("TODO: handle StopPoint "+childId);
    320321                                                }
    321322
    322323                                        } else {
    323                                                 System.err.println("Unsupported child: "+childId);
     324                                                Main.warn("Unsupported child: "+childId);
    324325                                        }
    325326                                }
    326327                        } else if (sa.getStopAreaExtension().getAreaType().equals(ChouetteAreaType.BOARDING_POSITION)) {
    327                                 //System.out.println("skipping StopArea with type "+sa.getStopAreaExtension().getAreaType()+": "+sa.getObjectId());
     328                                //Main.info("skipping StopArea with type "+sa.getStopAreaExtension().getAreaType()+": "+sa.getObjectId());
    328329                        } else {
    329                                 System.err.println("Unsupported StopArea type: "+sa.getStopAreaExtension().getAreaType());
     330                            Main.warn("Unsupported StopArea type: "+sa.getStopAreaExtension().getAreaType());
    330331                        }
    331332                }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/OsmDownloader.java

    r30563 r30568  
    1515                        try {
    1616                                String oapiServer = Main.pref.get(OdConstants.PREF_OAPI, OdConstants.DEFAULT_OAPI);
    17                                 System.out.println(oapiReq);
     17                                Main.info(oapiReq);
    1818                                String oapiReqEnc = URLEncoder.encode(oapiReq, OdConstants.UTF8);
    1919                                Main.main.menu.openLocation.openUrl(false, oapiServer+"data="+oapiReqEnc);
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ArchiveReader.java

    r30563 r30568  
    77import java.io.IOException;
    88import java.util.ArrayList;
     9import java.util.Collection;
     10import java.util.Collections;
     11import java.util.HashMap;
    912import java.util.List;
     13import java.util.Map;
    1014
    1115import javax.xml.bind.JAXBException;
     
    5660   
    5761    protected abstract String getTaskMessage();
    58        
    59     public DataSet parseDoc(final ProgressMonitor progressMonitor) throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException  {
    60        
    61         final File temp = OdUtils.createTempDir();
     62   
     63    protected Collection<File> getDocsToParse(final File temp, final ProgressMonitor progressMonitor) throws FileNotFoundException, IOException {
    6264        final List<File> candidates = new ArrayList<>();
    6365       
     66        if (progressMonitor != null) {
     67            progressMonitor.beginTask(getTaskMessage());
     68        }
     69        extractArchive(temp, candidates);
     70       
     71        if (promptUser && candidates.size() > 1) {
     72            DialogPrompter<CandidateChooser> prompt = new DialogPrompter<CandidateChooser>() {
     73                @Override
     74                protected CandidateChooser buildDialog() {
     75                    return new CandidateChooser(progressMonitor.getWindowParent(), candidates);
     76                }
     77            };
     78            if (prompt.promptInEdt().getValue() == 1) {
     79                return Collections.singleton(prompt.getDialog().getSelectedFile());
     80            }
     81        } else if (!candidates.isEmpty()) {
     82            return candidates;
     83        }
     84        return Collections.emptyList();
     85    }
     86   
     87    public Map<File, DataSet> parseDocs(final ProgressMonitor progressMonitor) throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException {
     88        Map<File, DataSet> result = new HashMap<>();
     89        File temp = OdUtils.createTempDir();
    6490        try {
     91            file = null;
     92            for (File f : getDocsToParse(temp, progressMonitor)) {
     93                DataSet from = getDataForFile(f, progressMonitor);
     94                if (from != null) {
     95                    result.put(f, from);
     96                }
     97            }
     98        } finally {
     99            OdUtils.deleteDir(temp);
    65100            if (progressMonitor != null) {
    66                 progressMonitor.beginTask(getTaskMessage());
     101                progressMonitor.finishTask();
    67102            }
    68             extractArchive(temp, candidates);
    69            
    70             file = null;
    71            
    72             if (promptUser && candidates.size() > 1) {
    73                 DialogPrompter<CandidateChooser> prompt = new DialogPrompter<CandidateChooser>() {
    74                     @Override
    75                     protected CandidateChooser buildDialog() {
    76                         return new CandidateChooser(progressMonitor.getWindowParent(), candidates);
    77                     }
    78                 };
    79                 if (prompt.promptInEdt().getValue() == 1) {
    80                     file = prompt.getDialog().getSelectedFile();
    81                 }
    82             } else if (!candidates.isEmpty()) {
    83                 file = candidates.get(0);
     103        }
     104        return result;
     105    }
     106   
     107    public DataSet parseDoc(final ProgressMonitor progressMonitor) throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException  {
     108        File temp = OdUtils.createTempDir();
     109       
     110        try {
     111            file = null;       
     112            Collection<File> files = getDocsToParse(temp, progressMonitor);
     113            if (!files.isEmpty()) {
     114                file = files.iterator().next();
    84115            }
    85116           
    86             DataSet from = getDataForFile(progressMonitor);
     117            DataSet from = getDataForFile(file, progressMonitor);
    87118            if (from != null) {
    88119                ds = from;
     
    100131    }
    101132
    102     protected DataSet getDataForFile(final ProgressMonitor progressMonitor)
     133    protected DataSet getDataForFile(File f, final ProgressMonitor progressMonitor)
    103134            throws FileNotFoundException, IOException, XMLStreamException, FactoryConfigurationError, JAXBException {
    104         if (file == null) {
     135        if (f == null) {
    105136            return null;
    106         } else if (!file.exists()) {
    107             Main.warn("File does not exist: "+file.getPath());
     137        } else if (!f.exists()) {
     138            Main.warn("File does not exist: "+f.getPath());
    108139            return null;
    109140        } else {
     141            Main.info("Parsing file "+f.getName());
    110142            DataSet from = null;
    111             FileInputStream in = new FileInputStream(file);
     143            FileInputStream in = new FileInputStream(f);
    112144            ProgressMonitor instance = null;
    113145            if (progressMonitor != null) {
    114146                instance = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
    115147            }
    116             if (file.getName().toLowerCase().endsWith(OdConstants.CSV_EXT)) {
     148            if (f.getName().toLowerCase().endsWith(OdConstants.CSV_EXT)) {
    117149                from = CsvReader.parseDataSet(in, handler, instance);
    118             } else if (file.getName().toLowerCase().endsWith(OdConstants.KML_EXT)) {
     150            } else if (f.getName().toLowerCase().endsWith(OdConstants.KML_EXT)) {
    119151                from = KmlReader.parseDataSet(in, instance);
    120             } else if (file.getName().toLowerCase().endsWith(OdConstants.KMZ_EXT)) {
     152            } else if (f.getName().toLowerCase().endsWith(OdConstants.KMZ_EXT)) {
    121153                from = KmzReader.parseDataSet(in, instance);
    122             } else if (file.getName().toLowerCase().endsWith(OdConstants.XLS_EXT)) {
     154            } else if (f.getName().toLowerCase().endsWith(OdConstants.XLS_EXT)) {
    123155                from = XlsReader.parseDataSet(in, handler, instance);
    124             } else if (file.getName().toLowerCase().endsWith(OdConstants.ODS_EXT)) {
     156            } else if (f.getName().toLowerCase().endsWith(OdConstants.ODS_EXT)) {
    125157                from = OdsReader.parseDataSet(in, handler, instance);
    126             } else if (file.getName().toLowerCase().endsWith(OdConstants.SHP_EXT)) {
    127                 from = ShpReader.parseDataSet(in, file, handler, instance);
    128             } else if (file.getName().toLowerCase().endsWith(OdConstants.MIF_EXT)) {
    129                 from = MifReader.parseDataSet(in, file, handler, instance);
    130             } else if (file.getName().toLowerCase().endsWith(OdConstants.TAB_EXT)) {
    131                 from = TabReader.parseDataSet(in, file, handler, instance);
    132             } else if (file.getName().toLowerCase().endsWith(OdConstants.GML_EXT)) {
     158            } else if (f.getName().toLowerCase().endsWith(OdConstants.SHP_EXT)) {
     159                from = ShpReader.parseDataSet(in, f, handler, instance);
     160            } else if (f.getName().toLowerCase().endsWith(OdConstants.MIF_EXT)) {
     161                from = MifReader.parseDataSet(in, f, handler, instance);
     162            } else if (f.getName().toLowerCase().endsWith(OdConstants.TAB_EXT)) {
     163                from = TabReader.parseDataSet(in, f, handler, instance);
     164            } else if (f.getName().toLowerCase().endsWith(OdConstants.GML_EXT)) {
    133165                from = GmlReader.parseDataSet(in, handler, instance);
    134             } else if (file.getName().toLowerCase().endsWith(OdConstants.XML_EXT)) {
    135                 if (OdPlugin.getInstance().xmlImporter.acceptFile(file)) {
     166            } else if (f.getName().toLowerCase().endsWith(OdConstants.XML_EXT)) {
     167                if (OdPlugin.getInstance().xmlImporter.acceptFile(f)) {
    136168                    from = NeptuneReader.parseDataSet(in, handler, instance);
    137169                } else {
    138                     System.err.println("Unsupported XML file: "+file.getName());
     170                    System.err.println("Unsupported XML file: "+f.getName());
    139171                }
    140172               
    141173            } else {
    142                 System.err.println("Unsupported file extension: "+file.getName());
     174                System.err.println("Unsupported file extension: "+f.getName());
    143175            }
    144176            return from;
     
    151183            if (entryName.toLowerCase().endsWith("."+ext)) {
    152184                candidates.add(file);
    153                 System.out.println(entryName);
    154185                break;
    155186            }
     
    159190                || OdPlugin.getInstance().xmlImporter.acceptFile(file))) {
    160191            candidates.add(file);
    161             System.out.println(entryName);
    162192        }
    163193    }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/SevenZipReader.java

    r30436 r30568  
    1111import java.io.OutputStream;
    1212import java.util.List;
     13import java.util.Map;
    1314
    1415import javax.xml.bind.JAXBException;
     
    5758    }
    5859
    59     @Override protected String getTaskMessage() {
     60    public static Map<File, DataSet> parseDataSets(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance, boolean promptUser)
     61            throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException {
     62        return new SevenZipReader(in, handler, promptUser).parseDocs(instance);
     63    }
     64
     65    @Override
     66    protected String getTaskMessage() {
    6067        return tr("Reading 7Zip file...");
    6168    }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java

    r30340 r30568  
    1010import java.io.InputStream;
    1111import java.util.List;
     12import java.util.Map;
    1213import java.util.zip.ZipEntry;
    1314import java.util.zip.ZipInputStream;
     
    3637                return new ZipReader(in, handler, promptUser).parseDoc(instance);
    3738        }
     39
     40    public static Map<File, DataSet> parseDataSets(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance, boolean promptUser)
     41            throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException {
     42        return new ZipReader(in, handler, promptUser).parseDocs(instance);
     43    }
    3844
    3945    protected void extractArchive(final File temp, final List<File> candidates) throws IOException, FileNotFoundException {
     
    7581    }
    7682
    77     @Override protected String getTaskMessage() {
     83    @Override
     84    protected String getTaskMessage() {
    7885        return tr("Reading Zip file...");
    7986    }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultShpHandler.java

    r30563 r30568  
    5151                boolean res = Math.abs(a - b) <= Main.pref.getDouble(OdConstants.PREF_CRS_COMPARISON_TOLERANCE, OdConstants.DEFAULT_CRS_COMPARISON_TOLERANCE);
    5252                if (Main.pref.getBoolean(OdConstants.PREF_CRS_COMPARISON_DEBUG, false)) {
    53                         System.out.println("Comparing "+a+" and "+b+" -> "+res);
     53                        Main.debug("Comparing "+a+" and "+b+" -> "+res);
    5454                }
    5555                return res;
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicReader.java

    r30563 r30568  
    55
    66import java.awt.Component;
     7import java.awt.GraphicsEnvironment;
    78import java.awt.Image;
    89import java.util.ArrayList;
     10import java.util.Arrays;
    911import java.util.HashMap;
    1012import java.util.List;
     
    200202   
    201203        private static final void compareDebug(CoordinateReferenceSystem crs1, CoordinateReferenceSystem crs2) {
    202                 System.out.println("-- COMPARING "+crs1.getName()+" WITH "+crs2.getName()+" --");
     204                Main.debug("-- COMPARING "+crs1.getName()+" WITH "+crs2.getName()+" --");
    203205                compareDebug("class", crs1.getClass(), crs2.getClass());
    204206                CoordinateSystem cs1 = crs1.getCoordinateSystem();
     
    229231                        }
    230232                }
    231                 System.out.println("-- COMPARING FINISHED --");
     233                Main.debug("-- COMPARING FINISHED --");
    232234        }
    233235       
     
    245247
    246248        private static final boolean compareDebug(String text, boolean result, Object o1, Object o2) {
    247                 System.out.println(text + ": " + result + "("+o1+", "+o2+")");
     249            Main.debug(text + ": " + result + "("+o1+", "+o2+")");
    248250                return result;
    249251        }
     
    253255                        transform = CRS.findMathTransform(crs, wgs84);
    254256                } catch (OperationNotFoundException e) {
    255                         System.out.println(crs.getName()+": "+e.getMessage()); // Bursa wolf parameters required.
     257                        Main.info(crs.getName()+": "+e.getMessage()); // Bursa wolf parameters required.
    256258                       
    257259                        if (findSimiliarCrs) {
     
    267269                                                                Main.pref.getDouble(OdConstants.PREF_CRS_COMPARISON_TOLERANCE, OdConstants.DEFAULT_CRS_COMPARISON_TOLERANCE));
    268270                                                if (((AbstractCRS)candidate).equals((AbstractIdentifiedObject)crs, false)) {
    269                                                         System.out.println("Found a potential CRS: "+candidate.getName());
     271                                                        Main.info("Found a potential CRS: "+candidate.getName());
    270272                                                        candidates.add(candidate);
    271273                                                } else if (Main.pref.getBoolean(OdConstants.PREF_CRS_COMPARISON_DEBUG, false)) {
     
    281283                               
    282284                                if (candidates.size() > 1) {
    283                                         System.err.println("Found several potential CRS.");//TODO: ask user which one to use
     285                                        Main.warn("Found several potential CRS: "+Arrays.toString(candidates.toArray()));
     286                                        // TODO: ask user which one to use
    284287                                }
    285288                               
     
    300303                                                transform = handler.findMathTransform(crs, wgs84, false);
    301304                                        } catch (OperationNotFoundException ex) {
    302                                                 System.out.println(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
     305                                            Main.warn(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
    303306                                        }
    304307                                } else {
     
    310313                                                        }
    311314                                                } catch (OperationNotFoundException ex) {
    312                                                         System.out.println(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
     315                                                    Main.warn(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
    313316                                                }
    314317                                        }
    315318                                }
    316319                                if (transform == null) {
    317                                         // ask user before trying lenient method
    318                                         if (warnLenientMethod(parent, crs)) {
     320                                        // ask user before trying lenient method, unless in headless mode (unit tests)
     321                                        if (!GraphicsEnvironment.isHeadless() && warnLenientMethod(parent, crs)) {
    319322                                                // User canceled
    320323                                                throw new UserCancelException();
    321324                                        }
    322                                         System.out.println("Searching for a lenient math transform.");
     325                                        Main.info("Searching for a lenient math transform.");
    323326                                        transform = CRS.findMathTransform(crs, wgs84, true);
    324327                                }
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlReader.java

    r30563 r30568  
    107107       
    108108        private void findCRS(String srs) throws NoSuchAuthorityCodeException, FactoryException {
    109                 System.out.println("Finding CRS for "+srs);
     109                Main.info("Finding CRS for "+srs);
    110110                if (gmlHandler != null) {
    111111                        crs = gmlHandler.getCrsFor(srs);
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReader.java

    r30567 r30568  
    158158                        } else {
    159159                                // Debug unknown geometry
    160                                 System.out.println("\ttype: "+geometry.getType());
    161                                 System.out.println("\tbounds: "+geometry.getBounds());
    162                                 System.out.println("\tdescriptor: "+desc);
    163                                 System.out.println("\tname: "+geometry.getName());
    164                                 System.out.println("\tvalue: "+geometry.getValue());
    165                                 System.out.println("\tid: "+geometry.getIdentifier());
    166                                 System.out.println("-------------------------------------------------------------");
     160                                Main.debug("\ttype: "+geometry.getType());
     161                                Main.debug("\tbounds: "+geometry.getBounds());
     162                                Main.debug("\tdescriptor: "+desc);
     163                                Main.debug("\tname: "+geometry.getName());
     164                                Main.debug("\tvalue: "+geometry.getValue());
     165                                Main.debug("\tid: "+geometry.getIdentifier());
     166                                Main.debug("-------------------------------------------------------------");
    167167                        }
    168168                       
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvReader.java

    r30563 r30568  
    88import java.nio.charset.Charset;
    99
     10import org.openstreetmap.josm.Main;
    1011import org.openstreetmap.josm.data.osm.DataSet;
    1112import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    4344                        if (csvHandler == null || csvHandler.getSeparator() == null || ";".equals(csvHandler.getSeparator())) {
    4445                                // If default sep has been used, try comma
    45                                 System.out.println(e.getMessage());
     46                                Main.warn(e.getMessage());
    4647                                csvReader.sep = ",";
    4748                                return csvReader.doParse(csvReader.splitLine(), instance);
     
    5455        @Override
    5556        protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
    56                 System.out.println("Parsing CSV file using charset "+charset+" and separator '"+sep+"'");
     57                Main.info("Parsing CSV file using charset "+charset+" and separator '"+sep+"'");
    5758
    5859                reader = new BufferedReader(new InputStreamReader(in, charset));
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsDocument.java

    r30563 r30568  
    1111import org.jopendocument.io.SaxContentUnmarshaller;
    1212import org.jopendocument.model.OpenDocument;
     13import org.openstreetmap.josm.Main;
    1314import org.xml.sax.InputSource;
    1415import org.xml.sax.XMLReader;
     
    4445                if (entry.getName().equals("content.xml")) {
    4546                    rdr.setContentHandler(contentHandler);
    46                     System.out.println("Parsing content.xml");
     47                    Main.info("Parsing content.xml");
    4748                    rdr.parse(getEntryInputSource(zis));
    4849                        contentParsed = true;
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsReader.java

    r30532 r30568  
    1313import org.jopendocument.model.table.TableTableRow;
    1414import org.jopendocument.model.text.TextP;
     15import org.openstreetmap.josm.Main;
    1516import org.openstreetmap.josm.data.osm.DataSet;
    1617import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    3839        protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
    3940                try {
    40                         System.out.println("Parsing ODS file");
     41                        Main.info("Parsing ODS file");
    4142                        doc = new OdsDocument(in);
    4243                        List<OfficeSpreadsheet> spreadsheets = doc.getBody().getOfficeSpreadsheets();
     
    6263
    6364                        if (rowIndex % 5000 == 0) {
    64                                 System.out.println("Lines read: "+rowIndex);
     65                                Main.info("Lines read: "+rowIndex);
    6566                        }
    6667
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetReader.java

    r30563 r30568  
    100100       
    101101        public DataSet doParse(String[] header, ProgressMonitor progressMonitor) throws IOException {
    102                 System.out.println("Header: "+Arrays.toString(header));
     102                Main.info("Header: "+Arrays.toString(header));
    103103               
    104104                Map<ProjectionPatterns, List<CoordinateColumns>> projColumns = new HashMap<>();
     
    175175                }
    176176               
    177                 System.out.println("Loading data using projections "+message);
     177                Main.info("Loading data using projections "+message);
    178178               
    179179                final DataSet ds = new DataSet();
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/XlsReader.java

    r30532 r30568  
    1414import org.apache.poi.ss.usermodel.Sheet;
    1515import org.apache.poi.ss.usermodel.Workbook;
     16import org.openstreetmap.josm.Main;
    1617import org.openstreetmap.josm.data.osm.DataSet;
    1718import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    3536        @Override
    3637        protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
    37                 System.out.println("Parsing XLS file");
     38            Main.info("Parsing XLS file");
    3839                try {
    3940                        wb = new HSSFWorkbook(new POIFSFileSystem(in));
  • applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/NonRegFunctionalTests.java

    r30563 r30568  
    66import static org.junit.Assert.assertTrue;
    77
     8import java.io.IOException;
     9import java.nio.file.DirectoryIteratorException;
     10import java.nio.file.DirectoryStream;
     11import java.nio.file.Files;
     12import java.nio.file.Path;
     13import java.nio.file.Paths;
     14import java.util.ArrayList;
    815import java.util.Collection;
    916
     17import org.openstreetmap.josm.TestUtils;
    1018import org.openstreetmap.josm.data.osm.DataSet;
    1119import org.openstreetmap.josm.data.osm.Node;
     
    4048        assertTrue(found);
    4149    }
     50   
     51    /**
     52     * Lists all datasets files matching given extension.
     53     * @param ext file extension to search for
     54     * @returns List of all datasets files matching given extension
     55     * @throws IOException in case of I/O error
     56     */
     57    public static Collection<Path> listDataFiles(String ext) throws IOException {
     58        Collection<Path> result = new ArrayList<>();
     59        addTree(Paths.get(TestUtils.getTestDataRoot()+"datasets"), result, ext.toLowerCase());
     60        return result;
     61    }
     62   
     63    static void addTree(Path directory, Collection<Path> all, String ext) throws IOException {
     64        try (DirectoryStream<Path> ds = Files.newDirectoryStream(directory)) {
     65            for (Path child : ds) {
     66                if (Files.isDirectory(child)) {
     67                    addTree(child, all, ext);
     68                } else if (child.toString().toLowerCase().endsWith(ext)) {
     69                    all.add(child);
     70                }
     71            }
     72        } catch (DirectoryIteratorException ex) {
     73            // I/O error encounted during the iteration, the cause is an IOException
     74            throw ex.getCause();
     75        }
     76    }
    4277}
  • applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifReaderTest.java

    r30550 r30568  
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.plugins.opendata.core.io.geographic;
    3 
    4 import static org.junit.Assert.assertFalse;
    53
    64import java.io.File;
     
    1311import org.openstreetmap.josm.JOSMFixture;
    1412import org.openstreetmap.josm.TestUtils;
    15 import org.openstreetmap.josm.data.osm.DataSet;
     13import org.openstreetmap.josm.plugins.opendata.core.io.NonRegFunctionalTests;
    1614
    1715/**
     
    3634        File file = new File(TestUtils.getRegressionDataFile(9592, "bg.mif"));
    3735        try (InputStream is = new FileInputStream(file)) {
    38             DataSet ds = MifReader.parseDataSet(is, file, null, null);
    39             assertFalse(ds.allPrimitives().isEmpty());
     36            NonRegFunctionalTests.testGeneric(MifReader.parseDataSet(is, file, null, null));
    4037        }
    4138    }
Note: See TracChangeset for help on using the changeset viewer.