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

Page tree

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

Skip to end of metadata
Go to start of metadata

接口作用

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

接口内容

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对象

web端对应扩展
$.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

 

  • No labels