package gr.ntua.ivml.mint.actions; import java.util.Map; import gr.ntua.ivml.mint.db.DB; import gr.ntua.ivml.mint.persistent.DataUpload; import gr.ntua.ivml.mint.persistent.Lock; import gr.ntua.ivml.mint.persistent.Mapping; import gr.ntua.ivml.mint.persistent.User; import gr.ntua.ivml.mint.util.Config; import gr.ntua.ivml.mint.valuemapping.MintIngestionValueMappingManager; import gr.ntua.ivml.mint.xml.TreeGenerationParser; import net.sf.json.JSONObject; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.apache.struts2.interceptor.SessionAware; @Results({ @Result(name="input", location="valueMapping.jsp"), @Result(name="error", location="ImportSummary", type="redirectAction" ), @Result(name="success", location="valueMapping.jsp" ), @Result(name="json", location="json.jsp" ) }) public class ValueMapping extends GeneralAction implements SessionAware { public static final String SESSION_VALUE_MAPPING = "gr.ntua.ivml.mint.valueMappingManager"; protected final Logger log = Logger.getLogger(getClass()); private long uploadId; private long mapId; private Lock lock; private long lockId; private String mapname; private String schemaname; private String command; private JSONObject json; private Map<String, Object> session; private MintIngestionValueMappingManager manager = new MintIngestionValueMappingManager(); public JSONObject getJson() { return this.json; } public void setJson(JSONObject json) { this.json = json; } public long getUploadId() { return uploadId; } public void setUploadId(long uploadId) { this.uploadId = uploadId; } public long getMapId() { return mapId; } public String getMapname() { return DB.getMappingDAO().findById(mapId, false).getName(); } public String getSchemaname() { Mapping m = DB.getMappingDAO().findById(mapId, false); return m.getTargetSchema().getName(); } public void setMapId(long mapId) { this.mapId = mapId; } public long getLockId() { return lockId; } public String getCommand() { return command; } public void setCommand(String command) { this.command = command; } @Action(value="ValueMapping") public String execute() throws Exception { log.debug("command: " + this.getCommand()); if(this.getCommand() == null) { DataUpload du = DB.getDataUploadDAO().getById(getUploadId(), false); Mapping mp=DB.getMappingDAO().findById(getMapId(), false); if(du != null && mp != null) { this.getManager().setDataUpload(du); lock=DB.getLockManager().directLock(getUser(), getSessionId(), mp ); if(lock!=null) { this.lockId=lock.getDbID(); return "success"; } else { return "error"; } } else { addActionError("Couldn't acquire lock on Mapping!"); } } else { JSONObject response = null; try { response = this.getManager().execute(ServletActionContext.getRequest()); } catch (Exception e) { e.printStackTrace(); response = new JSONObject().element("error", e.getMessage()); } log.debug(response); this.setJson(response); return "json"; } return "json"; } @Action("ValueMapping_input") @Override public String input() throws Exception { if( (user.getOrganization() == null && !user.hasRight(User.SUPER_USER)) || !user.hasRight(User.MODIFY_DATA)) { throw new IllegalAccessException( "No mapping rights!" ); } return super.input(); } public String getUploadSchema() { log.debug( "getSchema called"); TreeGenerationParser tgp = new TreeGenerationParser(); DataUpload du = DB.getDataUploadDAO().findById(uploadId, false); try { return tgp.parseUpload(du); } catch( Exception e ) { log.error( "Problems with the DB",e ); } return ""; } public MintIngestionValueMappingManager getManager() { if(this.session.containsKey(SESSION_VALUE_MAPPING)) { return (MintIngestionValueMappingManager) this.session.get(SESSION_VALUE_MAPPING); } else { MintIngestionValueMappingManager manager = new MintIngestionValueMappingManager(); this.session.put(SESSION_VALUE_MAPPING, manager); return manager; } } @Override public void setSession(Map<String, Object> arg0) { this.session = arg0; } }