001: /*BEGIN_COPYRIGHT_BLOCK
002: *
003: * Copyright (c) 2001-2007, JavaPLT group at Rice University (javaplt@rice.edu)
004: * All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions are met:
008: * * Redistributions of source code must retain the above copyright
009: * notice, this list of conditions and the following disclaimer.
010: * * Redistributions in binary form must reproduce the above copyright
011: * notice, this list of conditions and the following disclaimer in the
012: * documentation and/or other materials provided with the distribution.
013: * * Neither the names of DrJava, the JavaPLT group, Rice University, nor the
014: * names of its contributors may be used to endorse or promote products
015: * derived from this software without specific prior written permission.
016: *
017: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
018: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
019: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
020: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
021: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
022: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
023: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
024: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
025: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
026: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
027: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
028: *
029: * This software is Open Source Initiative approved Open Source Software.
030: * Open Source Initative Approved is a trademark of the Open Source Initiative.
031: *
032: * This file is part of DrJava. Download the current version of this project
033: * from http://www.drjava.org/ or http://sourceforge.net/projects/drjava/
034: *
035: * END_COPYRIGHT_BLOCK*/
036:
037: package edu.rice.cs.drjava.model;
038:
039: import java.util.HashMap;
040: import java.io.File;
041: import java.io.IOException;
042: import javax.swing.text.BadLocationException;
043:
044: import edu.rice.cs.util.UnexpectedException;
045: import edu.rice.cs.drjava.model.definitions.DefinitionsDocument;
046:
047: /** Test implementation of the document fetching methods in the GlobalModel interface. */
048: public class TestDocGetter extends DummyGlobalModel {
049:
050: /** Storage for documents and File keys. */
051: HashMap<File, OpenDefinitionsDocument> docs;
052:
053: /** Convenience constructor for no-documents case. */
054: public TestDocGetter() {
055: this (new File[0], new String[0]);
056: }
057:
058: /** Primary constructor, builds OpenDefDocs from Strings.
059: * @param files the keys to use when getting OpenDefDocs
060: * @param texts the text to put in the OpenDefDocs
061: */
062: public TestDocGetter(File[] files, String[] texts) {
063: if (files.length != texts.length) {
064: throw new IllegalArgumentException(
065: "Argument arrays must match in size.");
066: }
067:
068: docs = new HashMap<File, OpenDefinitionsDocument>(
069: texts.length * 2);
070:
071: GlobalEventNotifier en = new GlobalEventNotifier();
072: for (int i = 0; i < texts.length; i++) {
073: DefinitionsDocument doc = new DefinitionsDocument(en);
074: OpenDefinitionsDocument odoc = new TestOpenDoc(doc);
075: odoc.setFile(files[i]);
076: try {
077: doc.insertString(0, texts[i], null);
078: } catch (BadLocationException e) {
079: throw new UnexpectedException(e);
080: }
081: docs.put(files[i], odoc);
082: }
083: }
084:
085: public OpenDefinitionsDocument getDocumentForFile(File file)
086: throws IOException {
087: // Try to find the key in docs.
088: if (docs.containsKey(file))
089: return docs.get(file);
090: else
091: throw new IllegalStateException(
092: "TestDocGetter can't open new files!");
093: }
094:
095: /** Test implementation of OpenDefinitionsDocument interface. */
096: private static class TestOpenDoc extends DummyOpenDefDoc {
097: DefinitionsDocument _doc;
098: File _file;
099:
100: TestOpenDoc(DefinitionsDocument d) {
101: _doc = d;
102: _defDoc = d;
103: _file = null;
104: }
105:
106: /** This is the only method that we care about. */
107: protected DefinitionsDocument getDocument() {
108: return _doc;
109: }
110:
111: /** Okay, I lied. We need this one, too. */
112: public File getFile() throws FileMovedException {
113: return _file;
114: }
115:
116: public void setFile(File f) {
117: _file = f;
118: }
119: }
120: }
|