summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-10-03 14:05:19 +0000
committerburaq <buraq@epfl.ch>2003-10-03 14:05:19 +0000
commit75d0b4a55fdd5abf2b807d8363ed96b179876cfe (patch)
tree977d76b28533fa3047938e0cbd21fdb61d7d9d81 /sources
parentfba7c6afa2b1184728eb5af6e082989fd8cd6e4f (diff)
downloadscala-75d0b4a55fdd5abf2b807d8363ed96b179876cfe.tar.gz
scala-75d0b4a55fdd5abf2b807d8363ed96b179876cfe.tar.bz2
scala-75d0b4a55fdd5abf2b807d8363ed96b179876cfe.zip
removed java adapter classes for map,hashmap, ...
removed java adapter classes for map,hashmap, using scala collection classes instead
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/xml/Element.scala8
-rw-r--r--sources/scala/xml/FactoryAdapter.scala65
-rw-r--r--sources/scala/xml/Generic.scala55
-rw-r--r--sources/scala/xml/PCDATA.scala3
-rw-r--r--sources/scala/xml/ScalaFactoryAdapter.scala76
5 files changed, 106 insertions, 101 deletions
diff --git a/sources/scala/xml/Element.scala b/sources/scala/xml/Element.scala
index 9a128be66a..0592af3382 100644
--- a/sources/scala/xml/Element.scala
+++ b/sources/scala/xml/Element.scala
@@ -1,6 +1,6 @@
package scala.xml ;
-import javaAdapter.Map;
+import scala.collection.Map;
/** superclass for specific representation of XML elements. These are created by the dtd2scala tool, together
* with a parsing facility.
@@ -9,7 +9,7 @@ abstract class Element {
def getName: String; // the real element name
def getChildren: Seq[ Element ]; // the children
- def getAttribs: Map[ String, String ]; // disabled
+ def getAttribs: Map[ String, String ]; // disabled updates
def setAttribs( m:Map[ String, String ] ):Unit ;
/** see Element.hashValue
@@ -40,14 +40,14 @@ object Element {
*/
def hashValue( name:String, attribs:Map[ String, String ], children:Seq[ Element ] ) = {
- name.hashCode() + attribs.hashCode() + children.hashCode()
+ name.hashCode() + attribs.elements.hashCode() + children.hashCode()
}
/** returns a hash value computed from the element name, attributes and hash values of children.
- */
def hashValue( name:String, attribs:java.util.Map, children:Seq[ Element ] ) = {
name.hashCode() + attribs.hashCode() + children.hashCode()
}
+ */
}
diff --git a/sources/scala/xml/FactoryAdapter.scala b/sources/scala/xml/FactoryAdapter.scala
index 594f265d0d..3d277a2504 100644
--- a/sources/scala/xml/FactoryAdapter.scala
+++ b/sources/scala/xml/FactoryAdapter.scala
@@ -7,11 +7,14 @@ import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
-import java.util.Map;
+/*import java.util.Map;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Stack;
import java.util.Iterator;
+*/
+import scala.collection.mutable.Stack;
+import scala.collection.mutable.HashMap;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
@@ -37,8 +40,8 @@ abstract class FactoryAdapter
{
// default settings
- /** Default parser name. */
- val DEFAULT_PARSER_NAME = "org.apache.crimson.parser.XMLReaderImpl"; // included in JDK1.4
+ /** Default parser name - included in JDK1.4 */
+ val DEFAULT_PARSER_NAME = "org.apache.crimson.parser.XMLReaderImpl";
//val DEFAULT_PARSER_NAME = "org.apache.xerces.parsers.SAXParser";
/** Namespaces feature id (http://xml.org/sax/features/namespaces). */
@@ -49,9 +52,9 @@ abstract class FactoryAdapter
//
val buffer = new StringBuffer();
- val attribStack = new Stack();
- val hStack = new Stack(); // [ element ] contains siblings
- val tagStack = new Stack(); // [String]
+ val attribStack = new Stack[HashMap[String,String]];
+ val hStack = new Stack[Element]; // [ element ] contains siblings
+ val tagStack = new Stack[String]; // [String]
var curTag : String = null ;
var capture:boolean = false;
@@ -70,14 +73,14 @@ abstract class FactoryAdapter
* @return a new XML element.
*/
def createElement(elemName:String ,
- attribs:Map ,
- chIter:Iterator ):scala.Object; //abstract
+ attribs:HashMap[String,String] ,
+ chIter:List[Element] ):Element; //abstract
/** Creates an PCDATA element.
* @param text
* @return a new PCDATA element.
*/
- def createPCDATA( text:String ):scala.Object; // abstract
+ def createPCDATA( text:String ):PCDATA; // abstract
//
// ContentHandler methods
@@ -156,25 +159,23 @@ abstract class FactoryAdapter
capture = elementContainsText(localName) ;
hStack.push( null );
- var map:HashMap = null;
+ var map:HashMap[String,String] = null:HashMap[String,String];
if (attributes == null) {
//fOut.println("null");
}
else {
- map = new HashMap();
-
- val length:int = attributes.getLength();
- var i : int = 0;
- while ( i < length ) {
- val attrLocalName = attributes.getLocalName(i);
- //String attrQName = attributes.getQName(i);
- //String attrURI = attributes.getURI(i);
- val attrType = attributes.getType(i);
- val attrValue = attributes.getValue(i);
- if( attrType.equals("CDATA") )
- { val _ = map.put( attrLocalName, attrValue ); }
- i=i+1;
+ map = new HashMap[String,String];
+
+ for( val i <- List.range( 0, attributes.getLength() )) do {
+ val attrLocalName = attributes.getLocalName(i);
+ //String attrQName = attributes.getQName(i);
+ //String attrURI = attributes.getURI(i);
+ val attrType = attributes.getType(i);
+ val attrValue = attributes.getValue(i);
+ if( attrType.equals("CDATA") ) {
+ map.update( attrLocalName, attrValue );
+ }
}
}
@@ -207,22 +208,22 @@ abstract class FactoryAdapter
captureText();
- val attribMap = attribStack.pop().asInstanceOf[ HashMap ];
+ val attribMap = attribStack.top; attribStack.pop;
// reverse order to get it right
- val v = new LinkedList();
- var child = hStack.pop().asInstanceOf[ scala.Object ];
+ var v:List[Element] = Nil;
+ var child:Element = hStack.top; hStack.pop;
while( child != null ) {
- v.addFirst(child);
- child = hStack.pop().asInstanceOf[ scala.Object ];
+ v = child::v;
+ child = hStack.top; hStack.pop;
}
// create element
- rootElem = createElement(localName, attribMap, v.iterator());
+ rootElem = createElement( localName, attribMap, v );
hStack.push(rootElem);
// set
- curTag = tagStack.pop().asInstanceOf[ String ];
+ curTag = tagStack.top; tagStack.pop;
if (curTag != null) // root level
capture = elementContainsText(curTag);
@@ -294,7 +295,7 @@ abstract class FactoryAdapter
} // printError(String,SAXParseException)
//} // class FA_ErrorHandler
- var rootElem : scala.Object = null;
+ var rootElem : Element = null:Element;
//FactoryAdapter
// MAIN
@@ -304,7 +305,7 @@ abstract class FactoryAdapter
* @param fileName
* @return a new XML document object
*/
- def loadXML( fileName:String ):scala.Object = {
+ def loadXML( fileName:String ):Element = {
// variables
//PrintWriter out = new PrintWriter(System.out);
diff --git a/sources/scala/xml/Generic.scala b/sources/scala/xml/Generic.scala
index 87344d101f..6cd16c6742 100644
--- a/sources/scala/xml/Generic.scala
+++ b/sources/scala/xml/Generic.scala
@@ -1,8 +1,7 @@
package scala.xml;
-import scala.xml.javaAdapter.Map ;
-import scala.xml.javaAdapter.HashMap ;
-
+import scala.collection.Map ;
+import scala.collection.mutable.HashMap ;
/** Generic.load( <fileName> ) will load the xml document from file and
* create a tree with scala.Labelled, PCDATA and scala.Symbol objects.
@@ -14,7 +13,6 @@ object Generic {
// utility functions
/** TEMPORARY converting Java iterators to scala List
- */
def iterToList[ a ]( iter:java.util.Iterator ):List[a] =
if( !iter.hasNext() )
@@ -22,9 +20,10 @@ object Generic {
else
(iter.next().asInstanceOf[ a ])::iterToList( iter ) ;
- /** TEMPORARY converting Java maps to javaAdapter maps
*/
+ /** TEMPORARY converting Java maps to javaAdapter maps
+
def mapToMap[a,b]( map:java.util.Map ):Map[a,b] = {
val keys:java.util.Iterator = map.keySet().iterator();
@@ -42,6 +41,7 @@ object Generic {
iterToMap;
res
}
+ */
/** turns a Map that contains attributes into XML like att1="val1" att2="val2"
*/
@@ -50,7 +50,7 @@ object Generic {
def iterate( keys:Iterator[String] ) =
if( keys.hasNext ) {
val key = keys.next;
- " " + key + "=\"" + attrib.get( key ) + "\"";
+ " " + key + "=\"" + attrib.get( key ).match{ case Some(x) => x } + "\"";
} else {
""
}
@@ -124,35 +124,36 @@ object Generic {
def elementContainsText( name:java.lang.String ):boolean = true;
// default behaviour is hash-consing
- val cache = new HashMap();
+ val cache = new HashMap[Element,Element];
def createElement( elemName: String,
- attrs: java.util.Map,
- children: java.util.Iterator ):scala.Object = {
-
- val el = new Labelled( Symbol( elemName ),
- Generic.iterToList[ Any ]( children ))
- with Attribbed {
- def attribs = Generic.mapToMap[String,String]( attrs );
+ attrs: HashMap[String,String],
+ children: List[Element] ):Element = {
+
+ val el = new Labelled( Symbol( elemName ), children )
+ with Attribbed with Element {
+ def getName = elemName;
+ def getChildren = children;
+ def attribs = attrs ; // ?! not needed anymore
+ def getAttribs = attrs;
+ def setAttribs( m:Map[ String, String ] ) = {
+ /* FIXME throw error */ };
};
- val el_cache = cache.get( el.asInstanceOf[scala.All])
- .asInstanceOf[scala.Object];
- if ( el_cache != null ) {
- System.err.println("[using cached elem!]");
- el_cache
- } else {
- cache.put( el.asInstanceOf[scala.All], el.asInstanceOf[scala.All] );
- el
+ cache.get( el ).match{
+ case Some(cachedElem) =>
+ System.err.println("[using cached elem!]");
+ cachedElem
+ case None =>
+ cache.update( el, el );
+ el
}
+ }; // createElement
-
- }
-
- def createPCDATA( text:String ):scala.Object = {
+ def createPCDATA( text:String ):PCDATA = {
new PCDATA( text );
};
} // GenericFactoryAdapter
-}
+} //Generic
diff --git a/sources/scala/xml/PCDATA.scala b/sources/scala/xml/PCDATA.scala
index 8f21d11309..d7a235b187 100644
--- a/sources/scala/xml/PCDATA.scala
+++ b/sources/scala/xml/PCDATA.scala
@@ -2,7 +2,7 @@
package scala.xml;
-import scala.xml.javaAdapter.Map ;
+import scala.collection.Map ;
/** an XML representation text. Used in both generic and specific XML representation
*/
@@ -19,7 +19,6 @@ case class PCDATA( content:String ) extends Element {
*/
override def toXML:String = {
- // new java.util.StringBuffer !!crashes!!
val s = new StringBuffer();
var i = 0;
while( i < content.length() ) {
diff --git a/sources/scala/xml/ScalaFactoryAdapter.scala b/sources/scala/xml/ScalaFactoryAdapter.scala
index 58c60776cb..8a666cc293 100644
--- a/sources/scala/xml/ScalaFactoryAdapter.scala
+++ b/sources/scala/xml/ScalaFactoryAdapter.scala
@@ -1,7 +1,9 @@
package scala.xml ;
-import scala.xml.javaAdapter.Map ;
-import scala.xml.javaAdapter.HashMap ;
+import scala.collection.Map ;
+import scala.collection.mutable.HashMap ;
+//import scala.xml.javaAdapter.Map ;
+//import scala.xml.javaAdapter.HashMap ;
/** a Scala specific dtd2scala.FactoryAdapter, which plays the SAX content
* handler for the SAX parser. It implements the three callback methods
@@ -31,42 +33,44 @@ abstract class ScalaFactoryAdapter
/** looks up in g whether an element may contain text (PCDATA)
*/
- def elementContainsText( name:java.lang.String ):boolean =
- g.get( name ) ;
+ def elementContainsText( name:java.lang.String ):boolean =
+ g.get( name ).match { case Some(x) => x };
// if compress is set, used for hash-consing
- val cache = new HashMap();
+ val cache = new HashMap[int,Element];
- /** creates an element. uses hash-consing if compress == true
- */
- def createElement(elemName:String,
- attribs:java.util.Map,
- children:java.util.Iterator ):scala.Object = {
- val _children = Generic.iterToList[Element]( children ); // 2do:optimize
- if( !compress ) {
- val c = f.get( elemName ); // get constructor
- val el = c( _children );
- el.setAttribs( Generic.mapToMap[String,String]( attribs ) );
- el
- } else { // do hash-consing
-
- val h = Element.hashValue( elemName, attribs, _children );
- val el_cache = cache.get( h.asInstanceOf[scala.All] ).asInstanceOf[scala.Object];
- if ( el_cache != null ) { // return cached elem
- el_cache
- } else {
- val c = f.get( elemName ); // get constructor
- val el = c( _children );
- el.setAttribs( Generic.mapToMap[String,String]( attribs ) );
- cache.put( h.asInstanceOf[scala.All], el.asInstanceOf[scala.All] );
- el
- }
- }
- }
-
- /** creates PCDATA element */
- def createPCDATA( text:String ):scala.Object = {
- new PCDATA( text );
- };
+ /** creates an element. uses hash-consing if compress == true
+ */
+ def createElement(elemName:String,
+ attribs:HashMap[String,String],
+ children:List[Element] ):Element = {
+ // 2do:optimize
+ if( !compress ) {
+ // get constructor
+ val c = f.get( elemName ).match{ case Some(x) => x };
+ val el = c( children );
+ el.setAttribs( attribs );
+ el
+ } else { // do hash-consing
+
+ val h = Element.hashValue( elemName, attribs, children );
+ cache.get( h ).match {
+
+ case Some(cachedElem) =>
+ cachedElem
+
+ case None =>
+ // get constructor
+ val c = f.get( elemName ).match{ case Some(x) => x };
+ val el = c( children );
+ el.setAttribs( attribs );
+ cache.update( h, el );
+ el
+ }
+ }
+ } // createElement
+
+ /** creates PCDATA element */
+ def createPCDATA( text:String ):PCDATA = new PCDATA( text );
} // ScalaFactoryAdapter