svnno****@sourc*****
svnno****@sourc*****
2009年 11月 16日 (月) 23:06:17 JST
Revision: 38 http://sourceforge.jp/projects/ngms/svn/view?view=rev&revision=38 Author: osiire Date: 2009-11-16 23:06:17 +0900 (Mon, 16 Nov 2009) Log Message: ----------- [NMTree] commit first uncomplete codes. Modified Paths: -------------- trunk/source/NMTree/.classpath trunk/source/NMTree/build.xml Added Paths: ----------- trunk/source/NMTree/src/info/ngms/nmtree/AbstractDescriptionElement.scala trunk/source/NMTree/src/info/ngms/nmtree/NMDescription.scala trunk/source/NMTree/src/info/ngms/nmtree/NMElementAttribute.scala trunk/source/NMTree/src/info/ngms/nmtree/NMElementPermission.scala trunk/source/NMTree/src/info/ngms/nmtree/NMFileSystemTree.scala trunk/source/NMTree/src/info/ngms/nmtree/NMPath.scala trunk/source/NMTree/src/info/ngms/nmtree/NMTree.scala trunk/source/NMTree/src/info/ngms/nmtree/NMTreeElements.scala trunk/source/NMTree/src/info/ngms/nmtree/NMTreeOperations.scala trunk/source/NMTree/src/info/ngms/nmtree/test/ trunk/source/NMTree/src/info/ngms/nmtree/test/NMTreeTestSuite.scala Modified: trunk/source/NMTree/.classpath =================================================================== --- trunk/source/NMTree/.classpath 2009-11-05 09:05:16 UTC (rev 37) +++ trunk/source/NMTree/.classpath 2009-11-16 14:06:17 UTC (rev 38) @@ -1,7 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="ch.epfl.lamp.sdt.launching.SCALA_CONTAINER"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="output" path="bin"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="ch.epfl.lamp.sdt.launching.SCALA_CONTAINER"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/> + <classpathentry kind="lib" path="c:/Users/itp/svns/ngms/trunk/lib/scalatest-1.0.jar"/> + <classpathentry kind="output" path="bin"/> </classpath> Modified: trunk/source/NMTree/build.xml =================================================================== --- trunk/source/NMTree/build.xml 2009-11-05 09:05:16 UTC (rev 37) +++ trunk/source/NMTree/build.xml 2009-11-16 14:06:17 UTC (rev 38) @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- WARNING: Eclipse auto-generated file. Any modifications will be overwritten. To include a user specific buildfile here, simply create one in the same @@ -6,21 +6,32 @@ as the first entry and export the buildfile again. --> <project basedir="." default="build" name="NMTree"> <property environment="env"/> - <property name="ECLIPSE_HOME" value="../../../../../../../Applications/eclipse"/> + <property name="ECLIPSE_HOME" value="../../../../../../../work/bin/eclipse"/> <property name="NMNetWalker.location" value="../NMNetWalker"/> <property name="NMShell.location" value="../NMShell"/> + <property name="junit.output.dir" value="junit"/> <property name="debuglevel" value="source,lines,vars"/> - <property name="target" value="1.5"/> - <property name="source" value="1.5"/> - <path id="Scala Library version 2.7.7.final.libraryclasspath"> - <pathelement location="${ECLIPSE_HOME}/configuration/org.eclipse.osgi/bundles/197/1/.cp/lib/scala-library.jar"/> - <pathelement location="${ECLIPSE_HOME}/configuration/org.eclipse.osgi/bundles/197/1/.cp/lib/scala-dbc.jar"/> - <pathelement location="${ECLIPSE_HOME}/configuration/org.eclipse.osgi/bundles/197/1/.cp/lib/scala-swing.jar"/> + <property name="target" value="1.6"/> + <property name="source" value="1.6"/> + <path id="Scala Library version 2.7.6.final.libraryclasspath"> + <pathelement location="${ECLIPSE_HOME}/configuration/org.eclipse.osgi/bundles/199/1/.cp/lib/scala-library.jar"/> + <pathelement location="${ECLIPSE_HOME}/configuration/org.eclipse.osgi/bundles/199/1/.cp/lib/scala-dbc.jar"/> + <pathelement location="${ECLIPSE_HOME}/configuration/org.eclipse.osgi/bundles/199/1/.cp/lib/scala-swing.jar"/> </path> + <path id="JUnit 4.libraryclasspath"> + <pathelement location="${ECLIPSE_HOME}/plugins/org.junit4_4.5.0.v20090824/junit.jar"/> + <pathelement location="${ECLIPSE_HOME}/plugins/org.hamcrest.core_1.1.0.v20090501071000.jar"/> + </path> <path id="NMTree.classpath"> <pathelement location="bin"/> - <path refid="Scala Library version 2.7.7.final.libraryclasspath"/> + <path refid="Scala Library version 2.7.6.final.libraryclasspath"/> + <path refid="JUnit 4.libraryclasspath"/> + <pathelement location="../../lib/scalatest-1.0.jar"/> </path> + <path id="run.NMTreeTest.classpath"> + <path refid="Scala Library version 2.7.6.final.libraryclasspath"/> + <path refid="NMTree.classpath"/> + </path> <target name="init"> <mkdir dir="bin"/> <copy includeemptydirs="false" todir="bin"> @@ -70,4 +81,20 @@ <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> <antcall target="build"/> </target> + <target name="NMTreeTest"> + <mkdir dir="${junit.output.dir}"/> + <junit fork="yes" printsummary="withOutAndErr"> + <formatter type="xml"/> + <test name="info.ngms.nmtree.test.NMTreeTestSuite" todir="${junit.output.dir}"/> + <classpath refid="run.NMTreeTest.classpath"/> + </junit> + </target> + <target name="junitreport"> + <junitreport todir="${junit.output.dir}"> + <fileset dir="${junit.output.dir}"> + <include name="TEST-*.xml"/> + </fileset> + <report format="frames" todir="${junit.output.dir}"/> + </junitreport> + </target> </project> Added: trunk/source/NMTree/src/info/ngms/nmtree/AbstractDescriptionElement.scala =================================================================== --- trunk/source/NMTree/src/info/ngms/nmtree/AbstractDescriptionElement.scala (rev 0) +++ trunk/source/NMTree/src/info/ngms/nmtree/AbstractDescriptionElement.scala 2009-11-16 14:06:17 UTC (rev 38) @@ -0,0 +1,70 @@ +/* + * Next Generation Management System Project + * Copyright(c) 2009, NGMS Project Team All Rights Reserved. + */ +package info.ngms.nmtree + +import scala.collection.mutable.LinkedHashMap + +trait AbstractDescriptionElement { + + val header : LinkedHashMap[String, NMDescription] + val body : List[String] + + def find(tag : String) : Option[NMDescription] = { + val nmlz_tag = DescriptionElement.normalizeTag(tag) + try { + Some((header(nmlz_tag))) + } catch { + case _ => + None + } + } + + def findVal(tag : String) : Option[String] = { + val nmlz_tag = DescriptionElement.normalizeTag(tag) + try { + Some((header(nmlz_tag)).value) + } catch { + case _ => + None + } + } + + def findWith[A](tag : String) (default : A) (f : NMDescription => A) : A = { + find(tag) match { + case Some(desc) => + f(desc) + case None => + default + } + } + + def update(tag : String, value : String) : Unit = { + val desc = header(DescriptionElement.normalizeTag(tag)) + desc.value = value + } +} + +object DescriptionElement { + def delimiter = ":" + + def unapply(str : String) : Option[((String), (String))] = { + val parts = str split delimiter + if(parts.length == 1) + Some(parts(0).trim, "") + else if(parts.length == 2) + Some(parts(0).trim, parts(1)) + else + None + } + + def normalizeTag(tag : String) : String = + tag.toLowerCase // tags in Map should be lower case. + + def normalizeValue(tag : String, value : String) : NMDescription = + new NMDescription(tag, value, "") + + def normalize(tag : String, value : String) = + normalizeTag(tag) -> normalizeValue(tag, value) +} Added: trunk/source/NMTree/src/info/ngms/nmtree/NMDescription.scala =================================================================== --- trunk/source/NMTree/src/info/ngms/nmtree/NMDescription.scala (rev 0) +++ trunk/source/NMTree/src/info/ngms/nmtree/NMDescription.scala 2009-11-16 14:06:17 UTC (rev 38) @@ -0,0 +1,21 @@ +/* + * Next Generation Management System Project + * Copyright(c) 2009, NGMS Project Team All Rights Reserved. + */ +package info.ngms.nmtree + +object NMDescription { + def commentDelimiter = "#" + + def make(tag : String, value : String) = { + val parts = value split commentDelimiter + if (parts.length == 1) + new NMDescription(tag, parts(0).trim, "") + else + new NMDescription(tag, parts(0).trim, parts(1).trim) + } +} + +class NMDescription ( val tag : String, var value : String, var comment : String) { + import NMDescription.commentDelimiter +} Added: trunk/source/NMTree/src/info/ngms/nmtree/NMElementAttribute.scala =================================================================== --- trunk/source/NMTree/src/info/ngms/nmtree/NMElementAttribute.scala (rev 0) +++ trunk/source/NMTree/src/info/ngms/nmtree/NMElementAttribute.scala 2009-11-16 14:06:17 UTC (rev 38) @@ -0,0 +1,28 @@ +/* + * Next Generation Management System Project + * Copyright(c) 2009, NGMS Project Team All Rights Reserved. + */ +package info.ngms.nmtree + +/** + * NGTreeのエレメントが持つ属性を定義する抽象クラス + * + * @version $Id$ + * @author ogasa****@itpl***** + */ +trait NMElementAttribute { + import java.util.Date + + /** + * パスが示すエレメントのサイズ(byte)を返す。 + * @return パスが示すエレメントのサイズ。 + */ + val size : Long + + /** + * パスが示すエレメントが最後に更新された日時を返す + * @return パスが示すエレメントが最後に更新された日時。 + */ + val lastUpdateDate : Date + +} Added: trunk/source/NMTree/src/info/ngms/nmtree/NMElementPermission.scala =================================================================== --- trunk/source/NMTree/src/info/ngms/nmtree/NMElementPermission.scala (rev 0) +++ trunk/source/NMTree/src/info/ngms/nmtree/NMElementPermission.scala 2009-11-16 14:06:17 UTC (rev 38) @@ -0,0 +1,14 @@ +/* + * Next Generation Management System Project + * Copyright(c) 2009, NGMS Project Team All Rights Reserved. + */ +package info.ngms.nmtree + +/** + * NGTreeのエレメントが持つアクセス許可を表現する抽象クラス + * + * @version $Id$ + * @author ogasa****@itpl***** + */ +abstract class NMElementPermission { +} Added: trunk/source/NMTree/src/info/ngms/nmtree/NMFileSystemTree.scala =================================================================== --- trunk/source/NMTree/src/info/ngms/nmtree/NMFileSystemTree.scala (rev 0) +++ trunk/source/NMTree/src/info/ngms/nmtree/NMFileSystemTree.scala 2009-11-16 14:06:17 UTC (rev 38) @@ -0,0 +1,113 @@ +/* + * Next Generation Management System Project + * Copyright(c) 2009, NGMS Project Team All Rights Reserved. + */ +package info.ngms.nmtree + +import java.io.File +import java.io.InputStream +import java.io.OutputStream +import java.io.FileInputStream +import java.io.FileOutputStream +import java.util.Date +import scala.collection.mutable.LinkedHashMap + + +class NMFileSystemTree( realRoot : String, mnt : NMPath ) { + var mountPoint : NMPath = mnt + + implicit def ofRealPath( path : NMPath ) : String = { + NMPath.diff( mnt.canonical, path.canonical ) + } + + implicit def toNMPath( path : String ) : NMPath = { + new NMPath( path ) + } + + trait Identifier { + val id = 0L // 未実装 + } + + def createStream( path : NMPath ) : NMTree.TStreamElement = { + val file = new File( path ) + new { + // 未実装 + val id : Long = 0L + val input : InputStream = new FileInputStream( file ) + val output : OutputStream = new FileOutputStream( file ) + } + } + + def createDescription( path : NMPath ) : NMTree.TDescriptionElement = { + // 未実装 + val h = new LinkedHashMap[String, NMDescription]() + val b = Nil + new AbstractDescriptionElement { + val id : Long = 0L + val header = h + val body = b + def localCommit() : Unit = { } + } + } + + def createTable( path : NMPath ) : NMTree.TTableElement = { + // 未実装 + new { + val id : Long = 0L + val lines : Array[Array[String]] = Array(Array()) + def localCommit() : Unit = {} + } + } + + object PathOperations { + /** + * 自身のパスが実際に存在するかどうかを判定する。 + * @return 自身のパスが実際に存在すればtrue, そうでなければfalseが返される。 + */ + def exists( path : NMPath ) : Boolean = { + (new File(path)).exists() + } + + /* + * 自身のパスがノード(ファイルシステムの場合はディレクトリに対応)かどうかを判定する。 + * @return 自身のパスがノードならtrue, そうでなければfalse。 + */ + def isNode( path : NMPath ) : Boolean = { + (new File(path)).isDirectory() + } + + /** + * 自身のパスが持つ直下の子供のパスのリストを作成する。 + * @return 自身のパスが持つ直下の子供のパスのリスト。 + * 自身のパスに子供がいない場合は空リストになる。 + */ + def children( path : NMPath ) : List[NMPath] = { + (new File(path)).list().toList.map(toNMPath) + } + + /** + * パスが示すエレメントが持つ属性を返す。 + * @return パスが示すエレメントが持つ属性。 + */ + def attribute( path : NMPath ) : NMElementAttribute = { + var file = new File( path ) + new NMElementAttribute { + val size = 0L + val lastUpdateDate = new Date( file.lastModified() ) + } + } + } + + object TreeOperations { + def move( src : NMPath, dst : NMPath ) : Unit = { } + + def copy( src : NMPath, dst : NMPath, overwrite : Boolean ) : Unit = { } + + def delete( path : NMPath, recursive : Boolean ) : Unit = { } + + def symLink( src : NMPath, dst : NMPath ) : Unit = { } + } + + def pathOp : NMTree.TPathOperations = PathOperations + def treeOp : NMTree.TTreeOperations = TreeOperations +} \ No newline at end of file Added: trunk/source/NMTree/src/info/ngms/nmtree/NMPath.scala =================================================================== --- trunk/source/NMTree/src/info/ngms/nmtree/NMPath.scala (rev 0) +++ trunk/source/NMTree/src/info/ngms/nmtree/NMPath.scala 2009-11-16 14:06:17 UTC (rev 38) @@ -0,0 +1,121 @@ +/* + * Next Generation Management System Project + * Copyright(c) 2009, NGMS Project Team All Rights Reserved. + */ +package info.ngms.nmtree + +object NMPath { + + val separator : String = "/" + + def name( path : String ) : String = { + /* 未実装 */ + "" + } + + def concat ( path : String, child : String ) : String = { + /* 未実装 */ + "" + } + + def parent( path : String ) : String = { + /* 未実装 */ + "" + } + + def canonical( path : String ) : String = { + /* 未実装 */ + "" + } + + def diff( p1 : String, p2 : String ) : String = { + /* 未実装 */ + "" + } +} + +class NMPath ( path : String ) { + + val canonical = NMPath.canonical(path) + + /** + * 自身のパスが持つエレメントの名前(ファイルシステムではファイル名かディレクトリ名)を返す。 + * @return 自身のパスが持つエレメントの名前が返される。 + */ + def name : String = NMPath.name(canonical) + + /** + * 自身の親のパスを生成する。 + * @return このインスタンスの親のパスを生成する。このインスタンスがルートパスの場合は、自身が返される。 + */ + def parent : NMPath = { + new NMPath( NMPath.parent(canonical) ) + } + + /** + * 指定された名前を自身のパスの直下の子供としたパスを返す。 + * @param child 子供の名前。 + * @return 自身のパスに子供の名前を加えたパスが返される。 + */ + def concat( child : String ) : NMPath = { + new NMPath( NMPath.concat( canonical, child ) ) + } + + /** + * 自身のパスが実際に存在するかどうかを判定する。 + * @return 自身のパスが実際に存在すればtrue, そうでなければfalseが返される。 + */ + def exists : Boolean = { + NMTree.ImplMap.withImpl( + canonical, + impl => impl.pathOp.exists( this ) ) + } + + /** + * 自身のパスが持つ直下の子供のパスのリストを作成する。 + * @return 自身のパスが持つ直下の子供のパスのリストが返される。 + * 自身のパスに子供がいない場合は空リストが返される。 + */ + def children : List[NMPath] = + NMTree.ImplMap.withImpl( + canonical, + impl => impl.pathOp.children( this ) ) + + /** + * 指定されたパスのインスタンスと自身を比較する。 + * @param that 比較したいパスインスタンス。 + * @return 自身のパスと指定されたパスが同じパスを示しているならtrue, それ以外はfalse。 + */ + def ==( that : NMPath ) : Boolean = + canonical == that.canonical + + /* + * パスが示すエレメントが持つ属性を返す。 + * @return パスが示すエレメントが持つ属性。 + */ + def attribute : NMElementAttribute = + NMTree.ImplMap.withImpl( + canonical, + impl => impl.pathOp.attribute( this ) ) + + + /* + * パスが示すエレメントが持つアクセス許可を返す。 + * @return パスが示すエレメントが持つアクセス許可。 + */ +// def permisson : NMElementPermission = +// NMTree.PermissionMap.find( spath ) + + + def kind : NMTreeElementKind = { + Node + } + + + /** + * 自身のパスの正規パス名の文字列外部表現を返す。canonicalと同じ。 + * @return 正規パス名の文字列外部表現。 + */ + override def toString : String = canonical + +} Added: trunk/source/NMTree/src/info/ngms/nmtree/NMTree.scala =================================================================== --- trunk/source/NMTree/src/info/ngms/nmtree/NMTree.scala (rev 0) +++ trunk/source/NMTree/src/info/ngms/nmtree/NMTree.scala 2009-11-16 14:06:17 UTC (rev 38) @@ -0,0 +1,201 @@ +/* + * Next Generation Management System Project + * Copyright(c) 2009, NGMS Project Team All Rights Reserved. + * See License file. + */ +package info.ngms.nmtree + +import java.io.InputStream +import java.io.OutputStream + + +/** + * NGMS用木構造を表現するクラス + * + * @version $Id$ + * @author ogasa****@itpl***** + */ +object NMTree { + + type TPathOperations = { + + /* + * 自身のパスが実際に存在するかどうかを判定する。 + * @return 自身のパスが実際に存在すればtrue, そうでなければfalse。 + */ + def exists( path : NMPath ) : Boolean + + /* + * 自身のパスがノード(ファイルシステムの場合はディレクトリに対応)かどうかを判定する。 + * @return 自身のパスがノードならtrue, そうでなければfalse。 + */ + def isNode( path : NMPath ) : Boolean + + /* + * 自身のパスが持つ直下の子供のパスのリストを作成する。 + * @return 自身のパスが持つ直下の子供のパスのリスト。 + * 自身のパスに子供がいない場合は空リストになる。 + */ + def children( path : NMPath ) : List[NMPath] + + /* + * パスが示すエレメントが持つ属性を返す。 + * @return パスが示すエレメントが持つ属性。 + */ + def attribute( path : NMPath ) : NMElementAttribute + + } + + type TTreeOperations = { + /* + * パスの移動を定義する関数。 + * @param src 移動元のパス。 + * @param dst 移動先のパス。移動先のパスが移動元のパスの親になる。 + * @throws AppPermissionException + * @throws SourceNotFoundException + * @throws DestinationNotFoundException + * @throws DestinationAlreadyExistsException + */ + def move( src : NMPath, dst : NMPath ) : Unit + + /* + * パスのコピーを定義する関数。 + * @param src コピー元のパス + * @param dst コピー先のパス。コピー先のパスが作成されたコピーの親になる。 + * @param overwrite trueの場合、コピー先にすでに同じパスが存在しても上書きを行う。 + * @throws AppPermissionException + * @throws SourceNotFoundException + * @throws DestinationNotFoundException + * @throws DestinationAlreadyExistsException + */ + def copy( src : NMPath, dst : NMPath, overwrite : Boolean ) : Unit + + /* + * パスの削除を定義する関数。 + * @param path 削除したいパス。 + * @param recursive trueが指定された場合は、指定されたパスの子供を再帰的に辿り、全ての子供を削除する。 + * @throws AppPermissionException + * @throws DestinationNotFoundException + */ + def delete( path : NMPath, recursive : Boolean ) : Unit + + /* + * シンボリックリンクを定義する関数。 + * @param src リンクされる側のパス。 + * @param dst リンクした結果新しく作成されるパス。 + * @throws AppPermissionException + * @throws DestinationNotFoundException + * @throws DestinationAlreadyExistsException + */ + def symLink( src : NMPath, dst : NMPath ) : Unit + } + + type TStreamElement = { + /* + * グローバルに一意な番号。同一ファイルには同一のIDが割り振られ、変化しない。 + * このIDはパスに依存しない。 + */ + val id : Long + + /* + * ストリームから読み込みを行うためのハンドラインスタンス。 + */ + val input : InputStream + + /* + * ストリームへの書き込みを行うためのハンドラインスタンス。 + */ + val output : OutputStream + } + + type TDescriptionElement = { + /* + * グローバルに一意な番号。同一ファイルには同一のIDが割り振られ、変化しない。 + * このIDはパスに依存しない。 + */ + val id : Long + + val header : scala.collection.mutable.LinkedHashMap[String, NMDescription] + def findVal(tag : String) : Option[String] + def findWith[A](tag : String) (default : A) (f : NMDescription => A) : A + def update(tag : String, value : String) : Unit + def localCommit() : Unit + } + + type TTableElement = { + /* + * グローバルに一意な番号。同一ファイルには同一のIDが割り振られ、変化しない。 + * このIDはパスに依存しない。 + */ + val id : Long + val lines : Array[Array[String]] + def localCommit() : Unit + } + + type NMTreeImplimentation = { + def createStream( path : NMPath ) : TStreamElement + def createDescription( path : NMPath ) : TDescriptionElement + def createTable( path : NMPath ) : TTableElement + def pathOp : TPathOperations + def treeOp : TTreeOperations + } + + object ImplMap { + val impls = scala.collection.mutable.Map.empty[String, NMTreeImplimentation] + def find( path : String ) : Option[NMTreeImplimentation] = { + // 未実装 + None + } + def withImpl[T] ( path : String, f : NMTreeImplimentation => T ) : T = { + ImplMap.find(path) match { + case None => + throw new PathNotFoundException( path ) + case Some( impl ) => + f( impl ) + } + } + } + + def createStream ( path : NMPath ) : TStreamElement = { + ImplMap.withImpl( path.canonical, impl => impl.createStream( path ) ) + } + + def createDescription ( path : NMPath ) : TDescriptionElement = { + ImplMap.withImpl( path.canonical, impl => impl.createDescription( path ) ) + } + + def createTable ( path : NMPath ) : TTableElement = { + ImplMap.withImpl( path.canonical, impl => impl.createTable( path ) ) + } + + def mount( path : NMPath , impl : NMTreeImplimentation ) : Unit = { + // 未実装 + } + + def isValidOperations( ops : Seq[ NMTreeOperations ] ) : Boolean = { + // 未実装 + true + } + + def localCommit( ops : Seq[ NMTreeOperations ] ) : Unit = { + // 未実装 + } + + def globalCommit( root : NMPath ) : Unit = { + // 未実装 + } + + sealed abstract class WalkOrder + case object PreOrder + case object InOrder + case object PostOrder + + sealed abstract class WalkDirection + case class DepthFirst( order : WalkOrder ) extends WalkDirection + case object BreadthFirst extends WalkDirection + + def traversal[T]( root : NMPath, dir : WalkDirection) (f : Tuple2[T, NMPath] => T) ( init : T ) : T = { + // 未実装 + init + } +} Added: trunk/source/NMTree/src/info/ngms/nmtree/NMTreeElements.scala =================================================================== --- trunk/source/NMTree/src/info/ngms/nmtree/NMTreeElements.scala (rev 0) +++ trunk/source/NMTree/src/info/ngms/nmtree/NMTreeElements.scala 2009-11-16 14:06:17 UTC (rev 38) @@ -0,0 +1,12 @@ +package info.ngms.nmtree + +abstract class NMTreeElementKind +case object Node extends NMTreeElementKind +case object Stream extends NMTreeElementKind +case object Description extends NMTreeElementKind +case object Table extends NMTreeElementKind + +abstract class NMTreeElements +case class Stream( handler : NMTree.TStreamElement ) extends NMTreeElements +case class Description( handler : NMTree.TDescriptionElement ) extends NMTreeElements +case class Table( handler : NMTree.TTableElement ) extends NMTreeElements Added: trunk/source/NMTree/src/info/ngms/nmtree/NMTreeOperations.scala =================================================================== --- trunk/source/NMTree/src/info/ngms/nmtree/NMTreeOperations.scala (rev 0) +++ trunk/source/NMTree/src/info/ngms/nmtree/NMTreeOperations.scala 2009-11-16 14:06:17 UTC (rev 38) @@ -0,0 +1,67 @@ +/* + * Next Generation Management System Project + * Copyright(c) 2009, NGMS Project Team All Rights Reserved. + */ +package info.ngms.nmtree + +/** + * 木構造の操作が行われた際に発生する例外を表現する抽象クラス。 + */ +abstract class NMTreeOperationException extends Exception + +/** + * アプリケーションレベルの権限例外を表現するケースクラス。 + */ + case class AppPermissionException( msg : String ) extends NMTreeOperationException + + /** + * 指定されたパスが存在しない事を意味する例外。 + */ + case class PathNotFoundException( path : String ) extends NMTreeOperationException + + /** + * 指定された操作元が存在しない事を意味する例外。 + */ + case class SourceNotFoundException( src : NMPath ) extends NMTreeOperationException + + /** + * 指定された操作先が存在しない事を意味する例外。 + */ + case class DestinationNotFoundException( dst : NMPath ) extends NMTreeOperationException + + /** + * 指定された操作先がすでに存在することを意味する例外。 + */ + case class DestinationAlreadyExistsException( dst : NMPath ) extends NMTreeOperationException + +/** + * 木構造の操作を定義する抽象クラス。 + */ +abstract class NMTreeOperations + +/** + * パスの移動を定義するケースクラス。 + * @param src 移動元のパス。 + * @param dst 移動先のパス。移動先のパスが移動元のパスの親になる。 + */ +case class Move( src : NMPath, dst : NMPath ) extends NMTreeOperations + +/** + * パスのコピーを定義するケースクラス。 + * @param src コピー元のパス + * @param dst コピー先のパス。コピー先のパスが作成されたコピーの親になる。 + */ +case class Copy( src : NMPath, dst : NMPath ) extends NMTreeOperations + +/** + * パスの削除を定義するケースクラス。 + * @param path 指定されたパスが削除される。 + */ +case class Delete( path : NMPath ) extends NMTreeOperations + +/** + * シンボリックリンクを定義するケースクラス。 + * @param src リンクされる側のパス。 + * @param dst リンクした結果新しく作成されるパス。 + */ +case class SymLink( src : NMPath, dst : NMPath ) extends NMTreeOperations Added: trunk/source/NMTree/src/info/ngms/nmtree/test/NMTreeTestSuite.scala =================================================================== --- trunk/source/NMTree/src/info/ngms/nmtree/test/NMTreeTestSuite.scala (rev 0) +++ trunk/source/NMTree/src/info/ngms/nmtree/test/NMTreeTestSuite.scala 2009-11-16 14:06:17 UTC (rev 38) @@ -0,0 +1,19 @@ +package info.ngms.nmtree.test + +import org.scalatest.junit.AssertionsForJUnit +import scala.collection.mutable.ListBuffer +import org.junit.Assert._ +import org.junit.Test +import org.junit.Before + +class NMTreeTestSuite extends AssertionsForJUnit { + + @Before def initialize() { + val root = new NMPath("/") + val fs = new NMFileSystemTree( "c:/work", root ) + NMTree.mount( root, fs ) + } + + @Test def verifyFun() { + } +}