【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

接口作用

在决策平台的管理系统下增加管理菜单。

接口内容

PlateProvider
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();
}

关键引用类

FSPlate
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();

} 
PlatformManageModule
 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);
    }
});

 

注册方式

<extra-platform>
  <PlateProvider class="com.fr.plugin.xxx.youclassname"/>
</extra-platform>

示例

源码:http://www.finedevelop.com:2015/projects/fs/repos/plugins/browse/plugin-message

 

  • No labels