权限组件所缺的文件

21 篇文章 0 订阅
20 篇文章 2 订阅

原意是给大家看一下结构,没想大家都那么关心,我现在把所有的代码贴上来,谢谢大家关心.

唉,BLOG好烦啊,无法直接上传文件要一个一个贴


================ResourceLib.java ============
package org.fswan;

import java.util.ArrayList;
import java.util.Properties;

/**
 * 用来存储通用的XML配置文件位置和数据库连接属性.
 * 作为org.fswan里所有的包中类的基础配置文件.
 */
public class ResourceLib
{
 /**
  * 驱动的字符串
  */
 public static final String DRIVER = "Driver";
 /**
  * 数据库连接字符串
  */
 public static final String URL = "URL";
 /**
  * 用户
  */
 public static final String USER = "User";
 /**
  * 密码
  */
 public static final String PASSWORD = "Password";
 /**
  * 所有的XML配置文件的存储位置,存储的对象为URL
  */
 private static ArrayList resource = new ArrayList();
 /**
  * 存储所有的数据库配置.
  * 所有的数据库存储位置格式为:
  * 对象为Properties对象
  * 而properties对象里包含:
  * {@link #DRIVER DRIVER},{@link #URL URL},{@link #USER USER},{@link #PASSWORD PASSWORD},{@link #VIEW VIEW},{@link #TYPE TYPE}六个属性分别对应
  * 数据库的驱动,边接字符串,用户名,密码,视图,类型
  * 或者
  * {@link #JNDI JNDI},{@link #VIEW VIEW},{@link #TYPE TYPE}
  * JNDI名,视图,类型
  * 类型是以下的一个
  * {@link #WORKFLOW WORKFLOW}
  * {@link #BRAND BRAND}
  * {@link #STATUS STATUS}
  * {@link #SWITCH SWITCHER}
  * {@link #WORKUNIT WORKUNIT}
  * {@link #USER USER}
  */
 private static ArrayList prop = new ArrayList();
 /**
  * 获取所有的XML资源
  * @return XML资源泉
  */
 public static ArrayList getXmlResource()
 {
  return resource;
 }
 /**
  * 获取所有的数据库连接属性
  * @return 数据库链接属性
  */
 public static ArrayList getConnection()
 {
   return prop;
 }
 /**
  * 增加XML资源
  * @param source XML资源
  */
 public static void addResource(String source)
 {
  synchronized(resource)
  {
   resource.add(source);
  }
 }
 /**
  * 增加数据库链接属性
  * @param pro 数据库链接属性
  */
 public static void addDataProperty(Properties pro)
 {
  synchronized(prop)
  {
   prop.add(pro);
  }
 }
}

==============Input.java============
/*
 * Created on 2003-11-20
 *
 * Create By 方志文
 * email:fswan@yeah.net
 */
package org.fswan;

/**
 * @author 方志文
 *
 * 输入数据的接口,作为主类的数据输入式,
 * 现可以从xml,HttpServletRequest和JSPUpload获取数据
 *
 */
public interface Input {
 /**
  * 获取参数的值,如果无该参数则返回null,如果该参数对应多个值则返回其第一个值
  * @param parameter 参数
  * @return 值
  */
 public String getParameter(String parameter);
 /**
  * 获取参数的值列表
  * @param parameter 参数
  * @return 值
  */
 public String[] getParameterValues(String parameter);
 /**
  * 获取参数名的列表
  * @return 所有的参数的名
  */
 public String[] getParameterNames();
 /**
  * 获取数据源
  * @return 数据源
  */
 public Object getSource();
 /**
  * 设置参数,如果已存在该参数,则原来的作废
  * @param parameter 参数
  * @param value 值
  */
 public void setParameter(String parameter,String value);
 /**
  * 设置参数,如果已存在该参数,则把原来的作废
  * @param parameter 参数
  * @param values 值
  */
 public void setParameter(String parameter,String[] values);
 /**
  * 添加参数,如果已存在该参数,则把该值添加到原值后成数组
  * @param parameter 参数
  * @param value 值
  */
 public void addParameter(String parameter,String value);
 /**
  * 添加参数(多个值),如果已存在该参数,则把该值添加到原值后成数组
  * @param parameter 参数
  * @param values 值
  */
 public void addParameter(String parameter,String[] values);
}
================ManualInput.java ==============
package org.fswan;

public class ManualInput extends AbstractInput
{
 /* (non-Javadoc)
  * @see org.fswan.Input#getSource()
  */
 public Object getSource()
 {
  return null;
 }

}
===================Identity.java==========
package org.fswan;

import org.fswan.workflow.exception.IdentityMappingError;

/**
 * @author Administrator
 * 这个接是一个标识,用来唯一标识所有的工作流,状态,切换开关,分枝操作
 */
public interface Identity
{
 /**
  * 工作流的标识
  */
 public static final int WORKFLOW = 0;
 /**
  * 分枝操作的标识
  */
 public static final int BRAND = 1;
 /**
  * 状态的标识
  */
 public static final int STATUS =2;
 /**
  * 切换开关的标识
  */
 public static final int SWITCH = 3;
 /**
  * 用户的标识
  */
 public static final int USER = 4;
 /**
  * 工作单元
  */
 public static final int WORKUNIT = 5;
 /**
  * 角色
  */
 public static final int ROLE = 6;
 /**
  * 群组
  */
 public static final int GROUP = 7;
 
 public static final int VIEWCLASS = 255;
 
 public static final String XMLWORKFLOW = "XMLWorkFlow";
 public static final String XMLBRAND = "XMLBrand";
 public static final String XMLSWITCHER = "XMLSwitcher";
 public static final String XMLSTATUS = "XMLStatus";
 public static final String XMLWORKUNIT = "XMLWorkUnit";
 public static final String DBWORKFLOW = "DBWorkFlow";
 public static final String DBBRAND = "DBBrand";
 public static final String DBSWITCHER = "DBSwitcher";
 public static final String DBSTATUS = "DBStatus";
 public static final String DBWORKUNIT = "DBWorkUnit";
 public static final String XMLUSER = "XMLUser";
 public static final String XMLGROUP = "XMLGroup";
 public static final String XMLROLE = "XMLRole";
 
 /**
  * 获取标识的类型
  * 是以下常量中的一个
  * {@link #WORKFLOW WORKFLOW}
  * {@link #BRAND BRAND}
  * {@link #STATUS STATUS}
  * {@link #SWITCH SWITCH}
  * {@link #USER USER}
  * @return 标识的类型
  */
 public int getIdType();
 /**
  * 获取标识的名称
  * @return 标识的名称
  */
 public String getIdName();
 /**
  * 返回该Identity的子类型,该子类型是给newInstance使用的
  * @return 子类型
  */
 public String getSubType();
 /**
  * 通过ID生成实例
  * @return 实例
  * @throws IdentityMappingError 找不到生器异常
  */
 public Object newInstance() throws IdentityMappingError;
}
=============IdentityImpl.java===============
package org.fswan;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Hashtable;

import org.fswan.workflow.exception.IdentityMapHadExist;
import org.fswan.workflow.exception.IdentityMappingError;

/**
 * 唯一标识符类.
 * 由唯一标识符可以调用相应的类来生成相对应的接口生成相对应的实例
 * 不同种类标识符生成相对应的实例的类在{@link map}中进行映射定义.
 * 可调用静态方法register进行注册.
 */
public class IdentityImpl implements Identity
{
 private String name;
 private int type;
 private String subType;
 /**
  * 从ID到类的映射表
  */
 private static Hashtable map = new Hashtable();
 public IdentityImpl(int type,String subType,String name)
 {
  this.type = type;
  this.subType=subType;
  this.name = name;
 }
 public IdentityImpl genIdentity(int type)
 {
  SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmssSSS");
  String name = f.format(new Date());
  return new IdentityImpl(type,"",name);
 }
 /* (non-Javadoc)
  * @see org.fswan.Identity#getIdName()
  */
 public String getIdName()
 {
  return name;
 }

 /* (non-Javadoc)
  * @see org.fswan.Identity#getIdType()
  */
 public int getIdType()
 {
  return type;
 }
 public String getSubType()
 {
  return subType;
 }
 
 public String toString()
 {
  return "["+type+":"+name+"]";
 }
 public boolean equals(Object obj)
 {
  if(obj instanceof Identity)
  {
   return this.getIdType()==((Identity)obj).getIdType()
   && getIdName().equals(((Identity)obj).getIdName());
  }
  return false;
 }
 /**
  * 查找相应对的对象
  * @return 实例化后的对象
  * @throws IdentityMappingError 映射实现不了,
  * 可能是因为注册的类不存在或者无法实例化该类,或该类不是ImplementIdentity
  */
 public Object newInstance() throws IdentityMappingError
 {
  try
  {
   if(map.get(subType)==null)return null;
   ImplementIdentity ids = (ImplementIdentity)Class.forName(map.get(subType).toString()).newInstance();
   return ids.newInstance(this);
  } catch (InstantiationException e)
  {
   e.printStackTrace();
  } catch (IllegalAccessException e)
  {
   e.printStackTrace();
  } catch (ClassNotFoundException e)
  {
   e.printStackTrace();
  }
  throw new IdentityMappingError();
 }
 /**
  * 注册标识种类到生成实例类的映射
  * @param type 类型
  * @param obj 相对应的类名
  * @throws IdentityMapHadExist 异常,(该类型已注册)
  */
 public static void register(String subType,String obj) throws IdentityMapHadExist
 {
  if(map.containsKey(subType)) throw new IdentityMapHadExist(subType);
  map.put(subType,obj);
 }
 static
 {
  try
  {
   IdentityImpl.register(Identity.DBBRAND,"org.fswan.workflow.DBWrokFlow");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.DBSTATUS,"org.fswan.workflow.DBStatus");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.DBSWITCHER,"org.fswan.workflow.DBSwitcher");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.DBWORKFLOW,"org.fswan.workflow.DBWrokFlow");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.DBWORKUNIT,"org.fswan.workflow.DBWorkUnit");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.XMLBRAND,"org.fswan.workflow.XMLBrand");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.XMLGROUP,"org.fswan.permission.XMLGroup");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.XMLROLE,"org.fswan.permission.XMLRole");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.XMLSTATUS,"org.fswan.workflow.XMLStatus");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.XMLSWITCHER,"org.fswan.workflow.XMLSwitcher");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.XMLUSER,"org.fswan.permission.XMLUser");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.XMLWORKFLOW,"org.fswan.workflow.XMLWorkFlow");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }
  try
  {
   IdentityImpl.register(Identity.XMLWORKUNIT,"org.fswan.workflow.XMLWorkUnit");
  } catch (IdentityMapHadExist e)
  {
   e.printStackTrace();
  }

 }
}
==================ImplementIdentity.java=============
package org.fswan;

/**
 * @author swan
 * 通过ID实例化相应的对象.
 * 当用户自己实现User,Role,Group,Brand等对象时,通过ID来查找相对应的对象,
 * 在类IdentityImpl对象中根据注册各种Identity类型对应的InstanceIdentity对象
 * 来实例化对象.
 * 注意:该接口的子类的构造方法一定是PUBLIC且不带任何参数.
 */
public interface ImplementIdentity
{
 /**
  * 实例化ID相对对应的对象.
  * @param identity 要实例化的对象的ID
  * @return 对象
  */
 public Object newInstance(Identity identity);
}
===========CantFoundIDException.java-==============
package org.fswan.workflow.exception;

import org.fswan.Identity;

/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class CantFoundIDException extends Exception
{
 public CantFoundIDException(Identity id)
 {
  super("Can't Found ID:["+id.getIdType()+":"+id.getIdName()+"]");
 }
}
==================IdentityMapHadExist.java============
package org.fswan.workflow.exception;

/**
 * @author swan
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class IdentityMapHadExist extends Exception
{
 public IdentityMapHadExist(String subType)
 {
  super("Mapping Had Exist:"+subType);
 }
}
==================IdentityMappingError.java============
package org.fswan.workflow.exception;

/**
 * @author swan
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class IdentityMappingError extends Exception
{
 public IdentityMappingError()
 {
  super("The Mapping Class is not InstanceIdentity.");
 }
}
=================TypeCastException.java ============
package org.fswan.workflow.exception;

import org.fswan.db.Field;

/**
 * 类型转换异常,当从字符串转成特定类型出错时抛出
 */
public class TypeCastException extends Exception
{
 /**
  * 构造函数
  * @param field 字段
  * @param str 字符串值
  */
 public TypeCastException(Field field,String str)
 {
  super(str+" cast to "+field + " Error");
 }
}
===============abstractinput.java===================
/*
 * Created on 2003-11-21
 *
 * Create By FSWAN
 * email:fswan@yeah.net
 */
package org.fswan;
import java.util.ArrayList;
import java.util.Hashtable;
/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public abstract class AbstractInput implements Input
{
 /**
  * 存储的参数与值的对应,Key是参数字符串,值为参数对应的值的列表为ArrayList
  */
 public Hashtable parameters = new Hashtable();
 /* (non-Javadoc)
  * @see org.fswan.db.Input#getParameter(java.lang.String)
  */
 public String getParameter(String parameter)
 {
  ArrayList values = (ArrayList) parameters.get(parameter);
  if (values == null)
   return null;
  if(values.get(0)==null)return null;
  return values.get(0).toString();
 }
 /* (non-Javadoc)
  * @see org.fswan.db.Input#getParameterValues(java.lang.String)
  */
 public String[] getParameterValues(String parameter)
 {
  ArrayList values = (ArrayList) parameters.get(parameter);
  if (values == null)
   return null;
  String[] retValues = new String[values.size()];
  for (int i = 0; i < retValues.length; i++)
  {
   retValues[i] = values.get(i).toString();
  }
  return retValues;
 }
 /* (non-Javadoc)
  * @see org.fswan.db.Input#getParameterNames()
  */
 public String[] getParameterNames()
 {
  Object[] nameObjects = parameters.keySet().toArray();
  String[] names = new String[nameObjects.length];
  for (int i = 0; i < names.length; i++)
  {
   names[i] = nameObjects[i].toString();
  }
  return names;
 }
 /* (non-Javadoc)
  * @see org.fswan.db.Input#getSource()
  */
 public abstract Object getSource();
 /* (non-Javadoc)
  * @see org.fswan.db.Input#setParameter(java.lang.String, java.lang.String)
  */
 public void setParameter(String parameter, String value)
 {
  if (parameters.containsKey(parameter))
  {
   parameters.remove(parameter);
  }
  ArrayList al = new ArrayList();
  al.add(value);
  parameters.put(parameter, al);
 }
 /* (non-Javadoc)
  * @see org.fswan.db.Input#setParameter(java.lang.String, java.lang.String[])
  */
 public void setParameter(String parameter, String[] values)
 {
  if (parameters.containsKey(parameter))
  {
   parameters.remove(parameter);
  }
  if(values == null) return;
  ArrayList al = new ArrayList();
  for (int i = 0; i < values.length; i++)
  {
   al.add(values[i]);
  }
  parameters.put(parameter, al);
 }
 /* (non-Javadoc)
  * @see org.fswan.db.Input#addParameter(java.lang.String, java.lang.String)
  */
 public void addParameter(String parameter, String value)
 {
  if (parameters.containsKey(parameter)) //如果原数据中存在此参数
  {
   ArrayList values = (ArrayList) parameters.get(parameter);
   values.add(value);
  } else
  {
   ArrayList values = new ArrayList();
   values.add(value);
   parameters.put(parameter, values);
  }
 }
 /* (non-Javadoc)
  * @see org.fswan.db.Input#addParameter(java.lang.String, java.lang.String[])
  */
 public void addParameter(String parameter, String[] values)
 {
  if (parameters.containsKey(parameter)) //如果原数据中存在此参数
  {
   ArrayList tmpValues = (ArrayList) parameters.get(parameter);
   for (int i = 0; i < values.length; i++)
   {
    tmpValues.add(values[i]);
   }
  } else
  {
   ArrayList tmpValues = new ArrayList();
   for (int i = 0; i < values.length; i++)
   {
    tmpValues.add(values[i]);
    parameters.put(parameter, values);
   }
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 链接器和加载器是计算机程序开发中的重要工具,用于将程序的各个模块(比如函数、库、数据等)整合起来并在内存中加载运行。 链接器主要功能是将编译得到的目标文件(或可执行文件)中的符号引用与符号定义进行解析和连接,生成最终的可执行文件。它负责解决符号跳转、符号重定位等问题,并将程序中引用的函数、变量等符号与其定义所在的对象文件建立起正确的关联关系。链接器的工作包括符号解析、重定位、填充等,确保程序在运行时能够正确调用各个模块。 加载器则是将目标文件(或可执行文件)从外存加载到内存中,并进行必要的初始化操作,以便程序能够执行。加载器不仅要负责将程序的指令和数据加载到内存中的适当位置,还要处理地址重定位、动态链接等问题。加载器还可能进行内存空间分配、权限设置等操作,确保程序在运行时能够正常访问所需的内存区域。 链接器和加载器的工作密切相关,它们相辅相成,共同完成程序的编译、链接、加载和执行等过程。在编写和调试程序时,链接器和加载器的正确使用可以提高程序的可靠性和性能。同时,对链接器和加载器的深入理解,有助于我们更好地理解程序的执行过程,提高编程技能。 ### 回答2: linker和loader是计算机系统中的重要组件,主要用于执行可执行文件的加载和链接工作。下面我将详细介绍linker和loader的功能和作用。 首先,linker(链接器)是将多个目标文件和库文件合并成一个可执行文件的工具。它的主要任务是解析并解决目标文件之间的引用关系,将这些文件中的符号地址进行重定位,生成最终的可执行文件。链接器还会处理一些重要的任务,如符号重定位、符号绑定和符号解析等。通过将不同的目标文件进行连接,链接器可以将应用程序的各个部分整合在一起,使其能够在计算机系统中顺利运行。 而loader(装载器)则是将可执行文件从磁盘加载到内存中,为其在计算机系统中的运行提供必要的支持。加载过程中,loader会分配内存空间给可执行文件,然后将文件中的指令和数据加载到相应的内存地址,并且根据可执行文件的格式进行解析和转换。在加载过程中,loader还会进行一些额外的工作,如动态链接库(dynamic link library)的加载、内存地址的重映射和入口点的设置等。通过loader的工作,可执行文件被成功地加载到内存中,可以被操作系统正确地执行。 总之,linker和loader是计算机系统中执行可执行文件加载和链接工作的重要组件。linker负责将多个目标文件合并为一个可执行文件,解决文件之间的引用关系;而loader则负责将可执行文件从磁盘中加载到内存中,并进行必要的解析和转换工作,以便系统能够正确地执行该文件。这两个组件的合作使得应用程序能够在计算机系统中顺利地运行。 ### 回答3: linker和loader是与计算机程序的编译和执行密切相关的两个重要的工具。 linker(链接器)是一个程序,用于将编译后的目标文件合并成一个可执行文件。在编译过程中,源代码被编译器编译为目标文件,包含了程序的二进制代码和数据。然而,目标文件之间可能存在相互引用,需要通过链接器将它们集成在一起。链接器的主要作用是解析程序中的符号引用,将所有的目标文件合并成一个可执行文件。此外,链接器还负责处理目标文件中的重定位信息,确保程序在内存中正确地执行。 loader(加载器)是一个程序,用于将可执行文件从存储介质(如硬盘)加载到计算机的内存中,并开始执行。在计算机系统启动时,操作系统会调用加载器将可执行文件读取进内存,并按照指令的执行顺序开始执行程序。加载器的主要任务是管理内存空间,将可执行文件中的代码和数据加载到适当的内存地址中,并确保程序能够正确地运行。 linker和loader的工作密切相关。编译器编译源代码生成目标文件,链接器将目标文件合并成可执行文件,而加载器将可执行文件加载到内存中执行。这个过程确保了程序的正确性和可执行性。同时,linker和loader还负责处理程序依赖的库文件,将其链接到程序中,以满足程序运行的需求。 总的来说,linker和loader是编译和执行过程中不可或缺的环节,它们确保了程序的正确运行,并将程序从源代码转化为可执行的、可以在计算机上运行的形式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值