@Override
 public PortletApplicationDefinition getPortletApp(
     String projectPath, String projectModuleName, String portletAppText) {
   PortletApplicationDefinition portletApp =
       JaxbMarshalFactory.newIns().encodeXML(PortletApplicationDefinition.class, portletAppText);
   return portletApp;
 }
  @Override
  public List<Display> getAllDisplays(String projectPath, String projectModuleName) {

    String runtimeDir = RuntimeEnv.getInstance().getNCHome() + PortalEnv.PORTAL_HOME_DIR;

    List<Display> displays = new ArrayList<Display>();
    InputStream is = null;
    // 取项目自身displays
    String displayFile = getPortalSpecPath(projectPath, projectModuleName) + "/display.xml";
    try {
      is = new FileInputStream(displayFile);
      BufferedReader in = new BufferedReader(new InputStreamReader(is, "UTF-8"));
      StringBuffer buffer = new StringBuffer();
      String line = "";
      while ((line = in.readLine()) != null) {
        buffer.append(line);
      }
      String xml = buffer.toString();
      Display display = JaxbMarshalFactory.newIns().encodeXML(Display.class, xml);
      displays.add(display);
    } catch (IOException e) {
      LfwLogger.error(e.getMessage(), e);
    }

    // 获得所有依赖的module
    List<String> modules = new ArrayList<String>();
    PortalModule portalModule = getPortal(projectPath, projectModuleName);
    getDependModules(modules, portalModule, projectModuleName, projectPath, runtimeDir);
    for (String module : modules) {
      String file = runtimeDir + "/" + module + "/portalspec/display.xml";
      try {
        is = new FileInputStream(file);
        BufferedReader in = new BufferedReader(new InputStreamReader(is, "UTF-8"));
        StringBuffer buffer = new StringBuffer();
        String line = "";
        while ((line = in.readLine()) != null) {
          buffer.append(line);
        }
        String xml = buffer.toString();
        Display display = JaxbMarshalFactory.newIns().encodeXML(Display.class, xml);
        displays.add(display);
      } catch (IOException e) {
        LfwLogger.error(e.getMessage(), e);
      }
    }
    return displays;
  }
 @Override
 public LookAndFeel getLookAndFeel(String projectPath, String projectModuleName) {
   String file = projectPath + "/web/WEB-INF/conf/look-and-feel.xml";
   File f = new File(file);
   try {
     String xml = FileUtils.readFileToString(f, "UTF-8");
     LookAndFeel lookAndFeel = JaxbMarshalFactory.newIns().encodeXML(LookAndFeel.class, xml);
     return lookAndFeel;
   } catch (IOException e) {
     LfwLogger.error(e.getMessage(), e);
     return null;
   }
 }
 @Override
 public PtPlugin getPtPlugin(String projectPath, String projectModuleName) {
   String file = getPortalSpecPath(projectPath, projectModuleName) + "/plugin.xml";
   File f = new File(file);
   try {
     String xml = FileUtils.readFileToString(f, "UTF-8");
     PtPlugin ptPlugin = JaxbMarshalFactory.newIns().encodeXML(PtPlugin.class, xml);
     return ptPlugin;
   } catch (IOException e) {
     LfwLogger.error(e.getMessage(), e);
     return null;
   }
 }
 @Override
 public PortletApplicationDefinition getPortletApp(String projectPath, String projectModuleName) {
   File file = new File(getPortalSpecPath(projectPath, projectModuleName) + "/portlet.xml");
   try {
     String xml = FileUtils.readFileToString(file, "UTF-8");
     PortletApplicationDefinition portletApp =
         JaxbMarshalFactory.newIns().encodeXML(PortletApplicationDefinition.class, xml);
     return portletApp;
   } catch (IOException e) {
     LfwLogger.error(e.getMessage(), e);
     return null;
   }
 }
 /**
  * 扫描文件
  *
  * @param dir
  * @param tp
  * @return
  */
 private void scanf(List<Skin> skins, String module, File dir, String tp) {
   String file = dir + "/" + tp + "/description.xml";
   File f = new File(file);
   try {
     String xml = FileUtils.readFileToString(f, "UTF-8");
     SkinDescription skinDescription =
         JaxbMarshalFactory.newIns().encodeXML(SkinDescription.class, xml);
     for (Skin skin : skinDescription.getSkin()) {
       skins.add(skin);
     }
   } catch (IOException e) {
     LfwLogger.error(e.getMessage(), e);
   }
 }
  @Override
  public void saveDisplayToXml(String projectPath, String projectModuleName, Display display) {
    String filePath = getPortalSpecPath(projectPath, projectModuleName);
    File f = new File(filePath);
    if (!f.exists()) f.mkdirs();
    File file = new File(filePath + "/display.xml");
    String d = JaxbMarshalFactory.newIns().decodeXML(display);
    try {
      FileUtils.writeStringToFile(file, d, "UTF-8");

    } catch (Exception e) {
      LfwLogger.error(e.getMessage(), e);
      throw new LfwRuntimeException(e);
    }
  }
  @Override
  public void savePortalToXml(
      String projectPath, String projectModuleName, PortalModule portalModule) {

    String filePath = getPortalSpecPath(projectPath, projectModuleName);
    File f = new File(filePath);
    if (!f.exists()) f.mkdirs();
    File file = new File(filePath + File.separatorChar + "portal.xml");
    String pt = JaxbMarshalFactory.newIns().decodeXML(portalModule);
    try {
      FileUtils.writeStringToFile(file, pt, "UTF-8");
    } catch (IOException e) {
      LfwLogger.error(e.getMessage(), e);
      throw new LfwRuntimeException(e);
    }
  }
  @Override
  public void savePortletAppToXml(
      String projectPath, String projectModuleName, PortletApplicationDefinition portletApp) {
    //		String runtimeDir = RuntimeEnv.getInstance().getNCHome() + PortalEnv.PORTAL_HOME_DIR + "/" +
    // projectModuleName;
    String filePath = getPortalSpecPath(projectPath, projectModuleName);
    File f = new File(filePath);
    if (!f.exists()) f.mkdirs();
    File file = new File(filePath + "/portlet.xml");
    String d = JaxbMarshalFactory.newIns().decodeXML(portletApp);
    try {
      FileUtils.writeStringToFile(file, d, "UTF-8");

    } catch (Exception e) {
      LfwLogger.error(e.getMessage(), e);
      throw new LfwRuntimeException(e);
    }
  }
 @Override
 public SkinDescription getSkinDescription(
     String projectPath, String projectModuleName, String type, String themeId) {
   String filePath =
       getPortalSpecPath(projectPath, projectModuleName)
           + "/ftl/portaldefine/skin/"
           + themeId
           + "/"
           + type;
   File f = new File(filePath + "/description.xml");
   try {
     String xml = FileUtils.readFileToString(f, "UTF-8");
     SkinDescription skinDescription =
         JaxbMarshalFactory.newIns().encodeXML(SkinDescription.class, xml);
     return skinDescription;
   } catch (IOException e) {
     LfwLogger.error(e.getMessage(), e);
     return null;
   }
 }
 @Override
 public Display getDisplay(String projectPath, String projectModuleName) {
   InputStream is = null;
   String file = getPortalSpecPath(projectPath, projectModuleName) + "/display.xml";
   try {
     is = new FileInputStream(file);
     BufferedReader in = new BufferedReader(new InputStreamReader(is, "UTF-8"));
     StringBuffer buffer = new StringBuffer();
     String line = "";
     while ((line = in.readLine()) != null) {
       buffer.append(line);
     }
     String xml = buffer.toString();
     Display display = JaxbMarshalFactory.newIns().encodeXML(Display.class, xml);
     return display;
   } catch (IOException e) {
     LfwLogger.error(e.getMessage(), e);
     return null;
   }
 }
 @Override
 public void saveSkinDescription(
     String projectPath,
     String projectModuleName,
     String type,
     String themeId,
     SkinDescription skinDescription) {
   String filePath =
       getPortalSpecPath(projectPath, projectModuleName)
           + "/ftl/portaldefine/skin/"
           + themeId
           + "/"
           + type;
   File f = new File(filePath);
   if (!f.exists()) f.mkdirs();
   File file = new File(filePath + "/description.xml");
   String xml = JaxbMarshalFactory.newIns().decodeXML(skinDescription);
   try {
     FileUtils.writeStringToFile(file, xml, "UTF-8");
   } catch (Exception e) {
     LfwLogger.error(e.getMessage(), e);
   }
 }
  @Override
  public void saveLookAndFeelToXml(
      String projectPath, String projectModuleName, LookAndFeel lookAndFeel) {
    String runtimeDir =
        RuntimeEnv.getInstance().getNCHome() + PortalEnv.PORTAL_HOME_DIR + "/" + projectModuleName;
    String filePath = projectPath + "/web/WEB-INF/conf";
    File f = new File(filePath);
    if (!f.exists()) f.mkdirs();
    File file = new File(filePath + "/look-and-feel.xml");
    String d = JaxbMarshalFactory.newIns().decodeXML(lookAndFeel);
    try {
      if (!file.exists()) file.createNewFile();
      FileUtils.writeStringToFile(file, d, "UTF-8");

      /* 重新部署*/
      File runtimePath = new File(runtimeDir + "/portalspec");
      if (runtimePath.exists()) {
        deployLookAndFeel();
      }
    } catch (Exception e) {
      LfwLogger.error(e.getMessage(), e);
      throw new LfwRuntimeException(e);
    }
  }
 @Override
 public Page stringToPage(String xml) {
   Page page = JaxbMarshalFactory.newIns().encodeXML(Page.class, xml);
   return (Page) page;
 }