/* * Copyright 2011 Future Systems * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.krakenapps.dom.script; import java.util.ArrayList; import java.util.List; import org.krakenapps.api.ScriptContext; import org.krakenapps.dom.api.AreaApi; import org.krakenapps.dom.api.GlobalConfigApi; import org.krakenapps.dom.api.OrganizationApi; import org.krakenapps.dom.api.ProgramApi; import org.krakenapps.dom.api.RoleApi; import org.krakenapps.dom.api.UserApi; import org.krakenapps.dom.model.Admin; import org.krakenapps.dom.model.Area; import org.krakenapps.dom.model.Organization; import org.krakenapps.dom.model.Permission; import org.krakenapps.dom.model.Program; import org.krakenapps.dom.model.ProgramPack; import org.krakenapps.dom.model.ProgramProfile; import org.krakenapps.dom.model.Role; import org.krakenapps.dom.model.User; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class InitialSchema { private static final Logger logger = LoggerFactory.getLogger(InitialSchema.class); private static final String SCHEMA_VERSION = "1"; private static final String DEFAULT_DOMAIN = "localhost"; public static void generate(ScriptContext context, GlobalConfigApi globalConfigApi, OrganizationApi orgApi, RoleApi roleApi, ProgramApi programApi, AreaApi areaApi, UserApi userApi) { // TODO: check schema version, add vendor & applications Object schemaVersion = globalConfigApi.getConfig("initial_schema_version"); if (!SCHEMA_VERSION.equals(schemaVersion)) { logger.info("kraken dom: begin initialize schema"); createOrganization(context, orgApi); createArea(context, areaApi); createPrograms(context, orgApi, programApi); createRoles(context, roleApi); createAdmin(context, userApi, roleApi, programApi); try { globalConfigApi.setConfig("initial_schema_version", SCHEMA_VERSION, true); } catch (Exception e) { logger.error("kraken dom: initial schema version setting failed", e); context.println("initial schema version setting failed"); } } } public static void createOrganization(ScriptContext context, OrganizationApi orgApi) { if (orgApi.findOrganization(DEFAULT_DOMAIN) != null) return; Organization organization = new Organization(); organization.setDomain(DEFAULT_DOMAIN); organization.setName(DEFAULT_DOMAIN); organization.setEnabled(true); try { orgApi.createOrganization(organization); } catch (Exception e) { logger.error("kraken dom: organization initialize failed", e); context.println("organization initialize failed"); } } public static void createArea(ScriptContext context, AreaApi areaApi) { if (areaApi.findArea(DEFAULT_DOMAIN, "abb0de7a-eccb-4b51-a2e1-68d193e5e391") != null) return; Area area = new Area(); area.setGuid("abb0de7a-eccb-4b51-a2e1-68d193e5e391"); area.setName("/"); try { areaApi.createArea(DEFAULT_DOMAIN, area); } catch (Exception e) { logger.error("kraken dom: area initialize failed", e); context.println("area initialize failed"); } } public static void createPrograms(ScriptContext context, OrganizationApi orgApi, ProgramApi programApi) { if (programApi.findProgramPack(DEFAULT_DOMAIN, "System") == null) { ProgramPack pack = new ProgramPack(); pack.setName("System"); pack.setDll("system"); pack.setSeq(1); try { programApi.createProgramPack(DEFAULT_DOMAIN, pack); } catch (Exception e) { logger.error("kraken dom: program pack initialize failed", e); context.println("program pack initialize failed"); } } List<Program> programs = new ArrayList<Program>(); programs.add(createProgram(context, programApi, "Dashboard", "dashboard", 1)); programs.add(createProgram(context, programApi, "Account", "orgchart", 2)); programs.add(createProgram(context, programApi, "Task Manager", "taskmanager", 3)); programs.add(createProgram(context, programApi, "Run", "run", 4)); programs.add(createProgram(context, programApi, "Developer Console", "devconsole", 5)); if (programApi.findProgramProfile(DEFAULT_DOMAIN, "all") == null) { ProgramProfile profile = new ProgramProfile(); profile.setName("all"); profile.setPrograms(programs); try { programApi.createProgramProfile(DEFAULT_DOMAIN, profile); } catch (Exception e) { logger.error("kraken dom: program profile initialize failed", e); context.println("program profile pack initialize failed"); } orgApi.setOrganizationParameter(DEFAULT_DOMAIN, "default_program_profile_id", "all"); } } private static Program createProgram(ScriptContext context, ProgramApi programApi, String name, String type, int seq) { if (programApi.findProgram(DEFAULT_DOMAIN, "System", name) != null) return programApi.findProgram(DEFAULT_DOMAIN, "System", name); Program program = new Program(); program.setPack("System"); program.setName(name); program.setPath(type); program.setSeq(seq); program.setVisible(true); try { programApi.createProgram(DEFAULT_DOMAIN, program); } catch (Exception e) { logger.error("kraken dom: program initialize failed", e); context.println("program initialize failed"); } return program; } public static void createRoles(ScriptContext context, RoleApi roleApi) { Role master = createRole(context, roleApi, "master", 4); Permission permission = new Permission(); permission.setGroup("dom"); permission.setPermission("admin_grant"); master.getPermissions().add(permission); try { roleApi.updateRole(DEFAULT_DOMAIN, master); } catch (Exception e) { logger.error("kraken dom: master role initialize failed", e); context.println("master role initialize failed"); } createRole(context, roleApi, "admin", 3); createRole(context, roleApi, "member", 2); createRole(context, roleApi, "guest", 1); } private static Role createRole(ScriptContext context, RoleApi roleApi, String name, int level) { if (roleApi.findRole(DEFAULT_DOMAIN, name) != null) return roleApi.findRole(DEFAULT_DOMAIN, name); Role role = new Role(); role.setName(name); role.setLevel(level); try { roleApi.createRole(DEFAULT_DOMAIN, role); } catch (Exception e) { logger.error("kraken dom: role initialize failed", e); context.println("role initialize failed"); } return role; } public static void createAdmin(ScriptContext context, UserApi userApi, RoleApi roleApi, ProgramApi programApi) { if (userApi.findUser(DEFAULT_DOMAIN, "root") != null) return; User user = new User(); user.setLoginName("root"); user.setName("root"); user.setPassword("kraken"); Admin admin = new Admin(); admin.setRole(roleApi.getRole(DEFAULT_DOMAIN, "master")); admin.setProfile(programApi.getProgramProfile(DEFAULT_DOMAIN, "all")); admin.setLang("en"); admin.setEnabled(true); user.getExt().put("admin", admin); try { userApi.setSaltLength("localhost", 0); userApi.createUser(DEFAULT_DOMAIN, user); } catch (Exception e) { logger.error("kraken dom: admin initialize failed", e); context.println("admin initialize failed"); } } }