/* * Aipo is a groupware program developed by TOWN, Inc. * Copyright (C) 2004-2015 TOWN, Inc. * http://www.aipo.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.aimluck.eip.schedule; import java.util.Enumeration; import java.util.List; import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; import org.apache.turbine.util.RunData; import org.apache.velocity.context.Context; import com.aimluck.commons.field.ALStringField; import com.aimluck.eip.cayenne.om.account.EipTAclMap; import com.aimluck.eip.cayenne.om.portlet.EipMFacility; import com.aimluck.eip.cayenne.om.portlet.EipMFacilityGroup; import com.aimluck.eip.cayenne.om.security.TurbineGroup; import com.aimluck.eip.common.ALAbstractFormData; import com.aimluck.eip.common.ALDBErrorException; import com.aimluck.eip.common.ALEipConstants; import com.aimluck.eip.common.ALEipUser; import com.aimluck.eip.common.ALPageNotFoundException; import com.aimluck.eip.modules.actions.common.ALAction; import com.aimluck.eip.orm.Database; import com.aimluck.eip.orm.query.Operations; import com.aimluck.eip.schedule.ScheduleAdminAclUserGroupResultData.Type; import com.aimluck.eip.util.ALEipUtils; /** * */ public class ScheduleAdminAclFormData extends ALAbstractFormData { /** <code>logger</code> logger */ @SuppressWarnings("unused") private static final JetspeedLogger logger = JetspeedLogFactoryService .getLogger(ScheduleAdminAclFormData.class.getName()); private ScheduleAdminAclUserGroupResultData currentResultData; private ALStringField aclData; @Override public void init(ALAction action, RunData rundata, Context context) throws ALPageNotFoundException, ALDBErrorException { super.init(action, rundata, context); currentResultData = new ScheduleAdminAclUserGroupResultData(); currentResultData.initField(); aclData = new ALStringField(); String entitiyId = ALEipUtils.getTemp(rundata, context, ALEipConstants.ENTITY_ID); Integer tmpId = null; if (entitiyId.startsWith("ug")) { String id = entitiyId.substring(2); tmpId = Integer.valueOf(id); TurbineGroup record = Database.get(TurbineGroup.class, tmpId); if (record == null) { throw new ALPageNotFoundException(); } currentResultData.setId(tmpId); currentResultData.setName(record.getGroupAliasName()); currentResultData.setType(Type.ug); } else if (entitiyId.startsWith("fg")) { String id = entitiyId.substring(2); tmpId = Integer.valueOf(id); EipMFacilityGroup record = Database.get(EipMFacilityGroup.class, tmpId); if (record == null) { throw new ALPageNotFoundException(); } currentResultData.setId(tmpId); currentResultData.setName(record.getGroupName()); currentResultData.setType(Type.fg); } else if (entitiyId.startsWith("u")) { String id = entitiyId.substring(1); tmpId = Integer.valueOf(id); ALEipUser user = ALEipUtils.getALEipUser(tmpId); if (user == null) { throw new ALPageNotFoundException(); } currentResultData.setId(tmpId); currentResultData.setName(user.getAliasName().getValue()); currentResultData.setType(Type.u); } else if (entitiyId.startsWith("f")) { String id = entitiyId.substring(1); tmpId = Integer.valueOf(id); EipMFacility record = Database.get(EipMFacility.class, tmpId); if (record == null) { throw new ALPageNotFoundException(); } currentResultData.setId(tmpId); currentResultData.setName(record.getFacilityName()); currentResultData.setType(Type.f); } else { throw new ALPageNotFoundException(); } List<EipTAclMap> list = Database.query(EipTAclMap.class).where( Operations.eq(EipTAclMap.TARGET_ID_PROPERTY, tmpId)).where( Operations.eq(EipTAclMap.TARGET_TYPE_PROPERTY, currentResultData .getType() .toString())).where( Operations.eq(EipTAclMap.FEATURE_PROPERTY, "schedule")).fetchList(); StringBuilder tmpAcl = new StringBuilder(); boolean isFirst = true; for (EipTAclMap map : list) { if (!isFirst) { tmpAcl.append(","); } isFirst = false; tmpAcl.append(map.getType()).append(map.getId()).append(":").append( map.getLevel()); } aclData.setValue(tmpAcl.toString()); } /** * */ @Override public void initField() { } /** * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected void setValidator() throws ALPageNotFoundException, ALDBErrorException { } /** * @param msgList * @return * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected boolean validate(List<String> msgList) throws ALPageNotFoundException, ALDBErrorException { return true; } /** * @param rundata * @param context * @param msgList * @return * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected boolean loadFormData(RunData rundata, Context context, List<String> msgList) throws ALPageNotFoundException, ALDBErrorException { return true; } /** * @param rundata * @param context * @param msgList * @return * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected boolean insertFormData(RunData rundata, Context context, List<String> msgList) throws ALPageNotFoundException, ALDBErrorException { return false; } /** * @param rundata * @param context * @param msgList * @return * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected boolean updateFormData(RunData rundata, Context context, List<String> msgList) throws ALPageNotFoundException, ALDBErrorException { String sql = "delete from eip_t_acl_map where target_id = #bind($target_id) and target_type = #bind($target_type) and feature = #bind($feature)"; Database .sql(EipTAclMap.class, sql) .param("target_id", currentResultData.getId().getValue()) .param("target_type", currentResultData.getType().toString()) .param("feature", "schedule") .execute(); Enumeration<?> parameterNames = rundata.getRequest().getParameterNames(); while (parameterNames.hasMoreElements()) { String next = (String) parameterNames.nextElement(); if (next.startsWith("acl")) { String tmpId = next.substring(3); String value = rundata.getRequest().getParameter(next); Integer id = null; String type = null; Integer level = null; if (tmpId.startsWith("ug")) { id = Integer.valueOf(tmpId.substring(2)); type = "ug"; } else if (tmpId.startsWith("u")) { id = Integer.valueOf(tmpId.substring(1)); type = "u"; } try { level = Integer.valueOf(value); } catch (Throwable ignore) { // ignore } if (id != null && type != null && level != null) { EipTAclMap model = Database.create(EipTAclMap.class); model.setFeature("schedule"); model.setId(id); model.setType(type); model.setTargetId((int) currentResultData.getId().getValue()); model.setTargetType(currentResultData.getType().toString()); model.setLevel(level); } } } Database.commit(); return true; } /** * @param rundata * @param context * @param msgList * @return * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected boolean deleteFormData(RunData rundata, Context context, List<String> msgList) throws ALPageNotFoundException, ALDBErrorException { return false; } public ScheduleAdminAclUserGroupResultData getCurrentData() { return currentResultData; } public ALStringField getAclData() { return aclData; } }