接口作用
在决策平台的管理系统下增加管理菜单。
接口内容
package com.fr.fs.fun;
import com.fr.fs.FSPlate;
import com.fr.stable.fun.Level;
/**
* @author richie
* @date 2015-04-14
* @since 8.0
*/
public interface PlateProvider extends Level {
String XML_TAG = "PlateProvider";
int CURRENT_LEVEL = 1;
/**
* 移动模块所对应的类
* @return 类
*/
Class<? extends FSPlate> classForPlate();
/**
* 模块标记字符串,该标记将会出现在FS.config.supportModules中(用于JS中调用)
* @return 标记
*/
String mark();
}
关键引用类
package com.fr.fs;
import com.fr.data.dao.FieldColumnMapper;
import com.fr.data.dao.ObjectTableMapper;
import com.fr.data.dao.RelationFCMapper;
import com.fr.data.load.LazyExecutionJob;
import com.fr.fs.base.entity.PlatformManageModule;
import com.fr.fs.control.dao.tabledata.TableDataDAOControl.ColumnColumn;
import com.fr.fs.dao.EntryDAO;
import com.fr.stable.fun.Service;
import java.util.List;
/**
* 数据决策平台的板块
*/
public interface FSPlate extends LazyExecutionJob {
/**
* 初始化数据
*/
void initData();
/**
* 注册使用的需要service
*
* @return 所有需要注册的服务
*/
Service[] service4Register();
/**
* 注册getRelationClass对象的表结构
*
* @return 所有需要注册的表结构
*/
ObjectTableMapper[] mappers4Register();
/**
* 获取对应的java obj的class
*
* @return java obj的class
*/
Class getRelationClass();
/**
* 同步数据集验证时用到内置数据集表
*
* @return 同步数据集验证时用到内置数据集表
*/
ColumnColumn[] getTableDataColumns();
/**
* 注册Company角色表权限关系映射到对象到company表的内容中
*
* @return 模块和公司角色对应的权限关系
*/
FieldColumnMapper[] columnMappers4Company();
/**
* 注册Custom角色权限表关系映射到对象到custom表的内容中
*
* @return 模块和自定义角色对应的权限关系
*/
FieldColumnMapper[] columnMappers4Custom();
/**
* 获取与自定义角色有关的数据库关系
*
* @return 与自定义角色有关的数据库关系
*/
RelationFCMapper getRelationFCMapper4Custom();
/**
* 获取与部门角色有关的数据库关系
*
* @return 与部门角色有关的数据库关系
*/
RelationFCMapper getRelationFCMapper4Company();
/**
* 创建id为 id的plate getRelationClass所对应的对象
*
* @param id 对象的ID
* @return 创建的对象(dao)
*/
Object createPrivilegeObject(long id);
/**
* 获取所有的plate对应对象的ID
*
* @return plate对应的所有对象的ID
*/
List<String> getAllPrivilegesID();
/**
* 获取plate模块对应的所有Entry的数据库入口
*
* @return plate对应对象的dao
*/
List<EntryDAO> getEntryDaoAccess();
/**
* 目前主要做兼容的一些东西
*/
void refreshManager();
/**
* 释放一些东东
*/
void release();
/**
* 注册文件是否支持此模块
*
* @return 产品是否支持此模块
*/
boolean isSupport();
/**
* 是否需要权限控制
*
* @return 模块是否需要权限支持
*/
boolean needPrivilege();
/**
* 板块运行所需要的JS文件
* @return JS文件数组
*/
String[] getPlateJavaScriptFiles4WebClient();
/**
* 板块运行所需要的样式表文件
* @return 样式表文件数组
*/
String[] getPlateStyleFiles4WebClient();
/**
* 板块运行所需要的国际化文件
* @return 国际化文件路径
*/
String[] getLocaleFile();
/**
* 这个板块所需要支持的管理菜单,如果需要把菜单显示到中间位置,请设置这个板块菜单的优先级
* @return 管理菜单数组
*/
PlatformManageModule[] supportPlatformManageModules();
}
package com.fr.fs.base.entity;
import com.fr.data.dao.DAOBean;
import com.fr.fs.base.PriorityGenerator;
import com.fr.general.ComparatorUtils;
import com.fr.json.JSONException;
import com.fr.json.JSONObject;
public class PlatformManageModule extends DAOBean{
public static final String MARK_STRING = "PlatformManageModule";
private long parentId = -1;
private String name;
private String description;
private int priority;
private boolean appendToLast;
public PlatformManageModule() {
this.priority = PriorityGenerator.generate();
}
public PlatformManageModule(long id) {
this.id = id;
}
public PlatformManageModule(String name, String description, long id, long parentId) {
this(name, description, id, parentId, PriorityGenerator.generate());
}
/**
* 管理菜单项
* @param name 名字,为了国际化,一般写成国际化的键
* @param description 描述,一般不用描述,简写为空字符串
* @param id 菜单的唯一标识符
* @param parentId 菜单所属的子菜单,一般来说为1
* @param priority 菜单的优先级,可以使用次参数将菜单提前
*/
public PlatformManageModule(String name, String description, long id, long parentId, int priority) {
this.name = name;
this.description = description;
this.id = id;
this.parentId = parentId;
this.priority = priority;
}
/**
* 管理菜单项
* @param name 名字,为了国际化,一般写成国际化的键
* @param description 描述,一般不用描述,简写为空字符串
* @param id 菜单的唯一标识符
* @param parentId 菜单所属的子菜单,一般来说为1
* @param appendToLast 是否将菜单添加到最后
*/
public PlatformManageModule(String name, String description, long id, long parentId, boolean appendToLast) {
this.name = name;
this.description = description;
this.id = id;
this.parentId = parentId;
this.appendToLast = appendToLast;
}
public long getParentId() {
return parentId;
}
public void setParentId(long parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
public boolean isAppendToLast() {
return appendToLast;
}
/**
* 变成JSON格式
* @return JSON对象
* @throws JSONException 异常
*/
public JSONObject createJSONConfig() throws JSONException {
JSONObject jo = new JSONObject();
jo.put("id", id);
jo.put("text", name);
jo.put("key", name);
jo.put("value", id);
jo.put("description", description);
return jo;
}
/**
* 根据JSON数据生成对象
* @param jo JSON数据
* @throws JSONException 异常
*/
public void parseJSON(JSONObject jo) throws JSONException {
if (jo.has("id")) {
this.setId(jo.getLong("id"));
}
if (jo.has("key")) {
this.setName(jo.getString("key"));
}
if (jo.has("description")) {
this.setDescription(jo.getString("description"));
}
}
protected int hashCode4Properties() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((description == null) ? 0 : description.hashCode());
result = prime * result + (int) (id ^ (id >>> 32));
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + (int) (parentId ^ (parentId >>> 32));
return result;
}
/**
* 2个对象的属性是否一致
* @param obj 要比较的对象
* @return 属性是否一致
*/
public boolean equals4Properties(Object obj) {
return obj instanceof PlatformManageModule
&& ((PlatformManageModule) obj).id == id
&& ((PlatformManageModule) obj).parentId == parentId
&& ComparatorUtils.equals(((PlatformManageModule) obj).name, name)
&& ComparatorUtils.equals(((PlatformManageModule) obj).description, description);
}
}
在Modern主题下,需要有一个图片在包com/fr/fs/resources/images/frame/fsmodule{id}.png,其中{id}为PlatformManageModule的id。
Web端为了点击模块选项的时候打开对应的设置界面,需要FS.Design.op对象
$.extend(FS.Design.op, {
{id}: function (designContainer) {
FS.Plugin.DemoModule.init(designContainer);
}
});
其中{id}为PlatformManageModule的id。
注册方式
<extra-platform>
<PlateProvider class="com.fr.plugin.xxx.youclassname"/>
</extra-platform>
示例
源码:http://cloud.finedevelop.com:2015/projects/fs/repos/plugins/browse/plugin-message
plugin-message.zip