package com.fr.design.mainframe; import com.fr.base.io.BaseBook; import com.fr.file.FILE; import com.fr.stable.CoreConstants; import com.fr.stable.StringUtils; import java.util.ArrayList; import java.util.List; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public final class JTemplateFactory { private static final List> ALL_APP = new ArrayList>(); private JTemplateFactory() { } /** * 生成设计器编辑模板对象 * * @param file 包含了模板名称,类型以及内容的文件 * @return 设计器编辑的模板对象 */ public static JTemplate createJTemplate(@NotNull FILE file) { String fileName = file.getName(); int indexOfLastDot = fileName.lastIndexOf(CoreConstants.DOT); if (indexOfLastDot < 0) { return null; } String fileExtension = fileName.substring(indexOfLastDot + 1); for (App app : ALL_APP) { String[] defaultAppExtensions = app.defaultExtensions(); for (String defaultAppExtension : defaultAppExtensions) { if (defaultAppExtension.equalsIgnoreCase(fileExtension)) { JTemplate jt = app.openTemplate(file); if (jt != null) { return jt; } } } } return null; } @Nullable public static T asIOFile(@NotNull FILE file, String fileNameOrSuffix) { if (StringUtils.isEmpty(fileNameOrSuffix)) { return null; } int indexOfLastDot = fileNameOrSuffix.lastIndexOf(CoreConstants.DOT); if (indexOfLastDot < 0) { return null; } String fileExtension = fileNameOrSuffix.substring(indexOfLastDot + 1); for (App app : ALL_APP) { String[] defaultAppExtensions = app.defaultExtensions(); for (String defaultAppExtension : defaultAppExtensions) { if (defaultAppExtension.equalsIgnoreCase(fileExtension)) { BaseBook bb = app.asIOFile(file, false); if (bb != null) { return (T) bb; } } } } return null; } @Nullable public static T asIOFile(@NotNull FILE file) { return asIOFile(file, file.getName()); } /** * 注册app. * * @param app 注册app. */ public static void register(App app) { if (app != null) { ALL_APP.add(app); } } public static void remove(App app) { if (app != null) { ALL_APP.remove(app); } } }