dirdata.java

来自「一个日本流行的,功能较全的开源Web办公管理(Groupware)系统。」· Java 代码 · 共 232 行

JAVA
232
字号
package jp.co.sjts.gsession.link;

/*
 * 僨傿儗僋僩儕僨乕僞  DirData.java
 * Copyright (C) 1999-2000 Japan Total System Co,LTD
 *    Satoru K  <koni@sjts.co.jp>
 */

import java.io.File;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.Set;
import java.util.HashSet;
import java.util.Map;
import java.util.HashMap;
import java.util.StringTokenizer;
import java.util.Iterator;
import java.util.Collections;
import jp.co.sjts.gsession.tools.*;

public class DirData extends GSTextFile
{

	class DirInfo{
		private int dirId=0;					// 帺暘偺僨傿儗僋僩儕ID
		private String name = null;				// 僨傿儗僋僩儕柤
		private int parentDirId = 0;			// 恊僨傿儗僋僩儕ID
		private Set childDirIdSet = null;		// 巕僨傿儗僋僩儕ID偺攝楍

		DirInfo(int dirId,String name,int parentDirId,String childDirIds)
		{
			childDirIdSet = Collections.synchronizedSet(new HashSet());
			// 僨傿儗僋僩儕ID
			this.dirId = dirId;
			// 僨傿儗僋僩儕柤
			this.name = name;
			// 恊僨傿儗僋僩儕
			this.parentDirId = parentDirId;
			//  巕僨傿儗僋僩儕
			if(childDirIds!=null){
				StringTokenizer st = new StringTokenizer(childDirIds,":");
				while(st.hasMoreTokens())
					childDirIdSet.add(new Integer(st.nextToken()));
			}
		}

		boolean addChildDir(int childDirId)
		{
			synchronized(childDirIdSet){
				return childDirIdSet.add(new Integer(childDirId));
			}
		}

		boolean delChildDir(int childDirId)
		{
			synchronized(childDirIdSet){
				return childDirIdSet.remove(new Integer(childDirId));
			}
		}

		public String toString()
		{
			synchronized(childDirIdSet){
				String buf = Integer.toString(dirId)+";";
				buf += name+";";
				buf += Integer.toString(parentDirId)+";";
				Iterator it = childDirIdSet.iterator();
				while(it.hasNext())
					buf += ((Integer)it.next()).toString()+":";
				return buf;
			}
		}
	}

	public static final String FILENAME = "dirdata";
	private File file=null;
	private Map dirMap=null;

	// 僐儞僗僩儔僋僞
	public DirData(String dir) throws GSException
	{
		File dirfile = new File(dir);
		dirMap = Collections.synchronizedMap(new HashMap());

		// 僨傿儗僋僩儕偑懚嵼偟側偄応崌偼,怴婯偵嶌惉偡傞丅
		if(!dirfile.exists())
			dirfile.mkdirs();

		file = new File(dirfile,FILENAME);

		if(!file.exists()){
			dirMap = Collections.synchronizedMap(new HashMap());
			dirMap.put(new Integer(0),new DirInfo(0,"[儖乕僩]",-1,null));
			Save();
		}

	}

	protected File GetFile()
	{
		return file;
	}

	synchronized protected void Read(BufferedReader bf)
		throws GSException
	{
		try {
			dirMap.clear();

			String buf=bf.readLine();

			while(buf!=null){
				StringTokenizer st = new StringTokenizer(buf,";");

				// 僨傿儗僋僩儕ID傪庢摼
				Integer dirId = new Integer(st.nextToken());

				// 僨傿儗僋僩儕柤傪庢摼
				String name = st.nextToken();

				// 恊僨傿儗僋僩儕ID傪庢摼
				int parentDirId = Integer.parseInt(st.nextToken());

				// 巕僨傿儗僋僩儕ID偺庢摼
				String childlen=null;
				if(st.hasMoreTokens())
					childlen = st.nextToken();

				dirMap.put(dirId,
	   				   new DirInfo(dirId.intValue(),name,parentDirId,childlen));

				buf=bf.readLine();
			}

		} catch(IOException e){
			throw new GSException("IO僄儔乕",e);
		}
	}

	synchronized protected void Write(PrintWriter pw)
		throws GSException
	{
		Iterator it = dirMap.values().iterator();

		while(it.hasNext()){
			DirInfo di = (DirInfo)it.next();

			pw.println(di.toString());
		}
	}

	// 僨傿儗僋僩儕捛壛
	synchronized protected boolean addDir(int dirId,String name,int parentDirId)
		throws GSException
	{
		DirInfo dirInfo = new DirInfo(dirId,name,parentDirId,null);

		dirMap.put(new Integer(dirId),dirInfo);
		DirInfo pdirInfo = (DirInfo)dirMap.get(new Integer(parentDirId));

		return pdirInfo.addChildDir(dirId);
	}

	// 僨傿儗僋僩儕嶍彍
	synchronized protected boolean delDir(int dirId)
		throws GSException
	{
		DirInfo deldirInfo = (DirInfo)dirMap.get(new Integer(dirId));
		DirInfo pdirInfo = (DirInfo)dirMap.get(new Integer(deldirInfo.parentDirId));

		dirMap.remove(new Integer(dirId));

		return pdirInfo.delChildDir(dirId);
	}


	// 僨傿儗僋僩儕柤曇廤
	synchronized protected void editDir(int dirId,String name)
		throws GSException
	{
		DirInfo dirInfo = (DirInfo)dirMap.get(new Integer(dirId));
		if(dirInfo==null)
			return;

		dirInfo.name = name;
	}


	synchronized public String getDirName(int dirId)
	{
		DirInfo deldirInfo = (DirInfo)dirMap.get(new Integer(dirId));
		if(deldirInfo==null)
			return null;

		return deldirInfo.name;
	}

	synchronized public int getParentDirId(int dirId)
	{
		DirInfo deldirInfo = (DirInfo)dirMap.get(new Integer(dirId));
		if(deldirInfo==null)
			return -1;

		return deldirInfo.parentDirId;
	}

	synchronized public int[] getChildDirIds(int dirId)
	{
		DirInfo deldirInfo = (DirInfo)dirMap.get(new Integer(dirId));
		if(deldirInfo==null)
			return null;

		if(deldirInfo.childDirIdSet.size()<=0)
			return null;

		Iterator it = deldirInfo.childDirIdSet.iterator();
		
		int[] cids = new int[deldirInfo.childDirIdSet.size()];
		for(int i=0;it.hasNext();i++){
			cids[i] = ((Integer)it.next()).intValue();
		}
		return cids;
	}

	synchronized int getDirSize()
	{
		return dirMap.size();
	}
} 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?