List of usage examples for java.util HashMap isEmpty
public boolean isEmpty()
From source file:org.kuali.rice.krad.uif.element.Action.java
/** * Builds the data attributes that will be read client side to determine how to * handle the action and the additional data that should be submitted with the action * * <p>/* w ww.ja v a 2s . c o m*/ * Note these data attributes will be exposed as a data map client side. The simple attributes (non object * value) are also written out as attributes on the action element. * </p> * * @param view view instance the action belongs to * @param model model object containing the view data * @param parent component the holds the action */ protected void buildActionData(View view, Object model, LifecycleElement parent) { HashMap<String, String> actionDataAttributes = new HashMap<String, String>(); Map<String, String> dataDefaults = (Map<String, String>) (KRADServiceLocatorWeb.getDataDictionaryService() .getDictionaryBean(UifConstants.ACTION_DEFAULTS_MAP_ID)); // map properties to data attributes addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.AJAX_SUBMIT, Boolean.toString(ajaxSubmit)); addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.SUCCESS_CALLBACK, this.successCallback); addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.ERROR_CALLBACK, this.errorCallback); addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.PRE_SUBMIT_CALL, this.preSubmitCall); addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.LOADING_MESSAGE, this.loadingMessageText); addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.DISABLE_BLOCKING, Boolean.toString(this.disableBlocking)); addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.AJAX_RETURN_TYPE, this.ajaxReturnType); addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.REFRESH_ID, this.refreshId); addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.VALIDATE, Boolean.toString(this.performClientSideValidation)); addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.DIRTY_ON_ACTION, Boolean.toString(this.dirtyOnAction)); addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.CLEAR_DIRTY, Boolean.toString(this.clearDirtyOnAction)); addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.PERFORM_DIRTY_VALIDATION, Boolean.toString(this.performDirtyValidation)); if (confirmationDialog != null) { addDataAttribute(UifConstants.ActionDataAttributes.CONFIRM_DIALOG_ID, confirmationDialog.getId()); } else if (StringUtils.isNotBlank(confirmationPromptText)) { addDataAttribute(UifConstants.ActionDataAttributes.CONFIRM_PROMPT_TEXT, confirmationPromptText); } if (StringUtils.isNotBlank(dialogDismissOption)) { addDataAttribute(UifConstants.DataAttributes.DISMISS_DIALOG_OPTION, dialogDismissOption); } if (StringUtils.isNotBlank(dialogResponse)) { addDataAttribute(UifConstants.DataAttributes.DISMISS_RESPONSE, dialogResponse); } // all action parameters should be submitted with action Map<String, String> submitData = new HashMap<String, String>(); for (String key : actionParameters.keySet()) { String parameterPath = key; if (!key.equals(UifConstants.CONTROLLER_METHOD_DISPATCH_PARAMETER_NAME)) { parameterPath = UifPropertyPaths.ACTION_PARAMETERS + "[" + key + "]"; } submitData.put(parameterPath, actionParameters.get(key)); } for (String key : additionalSubmitData.keySet()) { submitData.put(key, additionalSubmitData.get(key)); } // if focus id not set default to focus on action if (focusOnIdAfterSubmit.equalsIgnoreCase(UifConstants.Order.NEXT_INPUT.toString())) { focusOnIdAfterSubmit = UifConstants.Order.NEXT_INPUT.toString() + ":" + this.getId(); } addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.FOCUS_ID, focusOnIdAfterSubmit); if (StringUtils.isNotBlank(jumpToIdAfterSubmit)) { addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.JUMP_TO_ID, jumpToIdAfterSubmit); } else if (StringUtils.isNotBlank(jumpToNameAfterSubmit)) { addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.ActionDataAttributes.JUMP_TO_NAME, jumpToNameAfterSubmit); } addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.DataAttributes.SUBMIT_DATA, ScriptUtils.toJSON(submitData)); // build final onclick script String onClickScript = this.getOnClickScript(); if (StringUtils.isNotBlank(actionScript)) { onClickScript = ScriptUtils.appendScript(onClickScript, actionScript); } else { onClickScript = ScriptUtils.appendScript(onClickScript, "actionInvokeHandler(this);"); } //stop action if the action is disabled if (disabled) { this.addStyleClass("disabled"); this.setSkipInTabOrder(true); } // on click script becomes a data attribute for use in a global handler on the client addActionDataSettingsValue(actionDataAttributes, dataDefaults, UifConstants.DataAttributes.ONCLICK, KRADUtils.convertToHTMLAttributeSafeString(onClickScript)); if (!actionDataAttributes.isEmpty()) { this.getDataAttributes().putAll(actionDataAttributes); } this.addDataAttribute(UifConstants.DataAttributes.ROLE, UifConstants.RoleTypes.ACTION); // add data attribute if this is the primary action if (this.isDefaultEnterKeyAction()) { this.addDataAttribute(UifConstants.DataAttributes.DEFAULT_ENTER_KEY_ACTION, Boolean.toString(this.isDefaultEnterKeyAction())); } }
From source file:org.apache.sqoop.mapreduce.CombineFileInputFormat.java
/** * Return all the splits in the specified set of paths *//* ww w. j av a2 s . c o m*/ private void getMoreSplits(JobContext job, Path[] paths, long maxSize, long minSizeNode, long minSizeRack, List<InputSplit> splits) throws IOException { Configuration conf = job.getConfiguration(); // all blocks for all the files in input set OneFileInfo[] files; // mapping from a rack name to the list of blocks it has HashMap<String, List<OneBlockInfo>> rackToBlocks = new HashMap<String, List<OneBlockInfo>>(); // mapping from a block to the nodes on which it has replicas HashMap<OneBlockInfo, String[]> blockToNodes = new HashMap<OneBlockInfo, String[]>(); // mapping from a node to the list of blocks that it contains HashMap<String, List<OneBlockInfo>> nodeToBlocks = new HashMap<String, List<OneBlockInfo>>(); files = new OneFileInfo[paths.length]; if (paths.length == 0) { return; } // populate all the blocks for all files long totLength = 0; for (int i = 0; i < paths.length; i++) { files[i] = new OneFileInfo(paths[i], conf, isSplitable(job, paths[i]), rackToBlocks, blockToNodes, nodeToBlocks, rackToNodes, maxSize); totLength += files[i].getLength(); } ArrayList<OneBlockInfo> validBlocks = new ArrayList<OneBlockInfo>(); Set<String> nodes = new HashSet<String>(); long curSplitSize = 0; // process all nodes and create splits that are local // to a node. for (Iterator<Map.Entry<String, List<OneBlockInfo>>> iter = nodeToBlocks.entrySet().iterator(); iter .hasNext();) { Map.Entry<String, List<OneBlockInfo>> one = iter.next(); nodes.add(one.getKey()); List<OneBlockInfo> blocksInNode = one.getValue(); // for each block, copy it into validBlocks. Delete it from // blockToNodes so that the same block does not appear in // two different splits. for (OneBlockInfo oneblock : blocksInNode) { if (blockToNodes.containsKey(oneblock)) { validBlocks.add(oneblock); blockToNodes.remove(oneblock); curSplitSize += oneblock.length; // if the accumulated split size exceeds the maximum, then // create this split. if (maxSize != 0 && curSplitSize >= maxSize) { // create an input split and add it to the splits array addCreatedSplit(splits, nodes, validBlocks); curSplitSize = 0; validBlocks.clear(); } } } // if there were any blocks left over and their combined size is // larger than minSplitNode, then combine them into one split. // Otherwise add them back to the unprocessed pool. It is likely // that they will be combined with other blocks from the // same rack later on. if (minSizeNode != 0 && curSplitSize >= minSizeNode) { // create an input split and add it to the splits array addCreatedSplit(splits, nodes, validBlocks); } else { for (OneBlockInfo oneblock : validBlocks) { blockToNodes.put(oneblock, oneblock.hosts); } } validBlocks.clear(); nodes.clear(); curSplitSize = 0; } // if blocks in a rack are below the specified minimum size, then keep them // in 'overflow'. After the processing of all racks is complete, these // overflow blocks will be combined into splits. ArrayList<OneBlockInfo> overflowBlocks = new ArrayList<OneBlockInfo>(); Set<String> racks = new HashSet<String>(); // Process all racks over and over again until there is no more work to do. while (blockToNodes.size() > 0) { // Create one split for this rack before moving over to the next rack. // Come back to this rack after creating a single split for each of the // remaining racks. // Process one rack location at a time, Combine all possible blocks that // reside on this rack as one split. (constrained by minimum and maximum // split size). // iterate over all racks for (Iterator<Map.Entry<String, List<OneBlockInfo>>> iter = rackToBlocks.entrySet().iterator(); iter .hasNext();) { Map.Entry<String, List<OneBlockInfo>> one = iter.next(); racks.add(one.getKey()); List<OneBlockInfo> blocks = one.getValue(); // for each block, copy it into validBlocks. Delete it from // blockToNodes so that the same block does not appear in // two different splits. boolean createdSplit = false; for (OneBlockInfo oneblock : blocks) { if (blockToNodes.containsKey(oneblock)) { validBlocks.add(oneblock); blockToNodes.remove(oneblock); curSplitSize += oneblock.length; // if the accumulated split size exceeds the maximum, then // create this split. if (maxSize != 0 && curSplitSize >= maxSize) { // create an input split and add it to the splits array addCreatedSplit(splits, getHosts(racks), validBlocks); createdSplit = true; break; } } } // if we created a split, then just go to the next rack if (createdSplit) { curSplitSize = 0; validBlocks.clear(); racks.clear(); continue; } if (!validBlocks.isEmpty()) { if (minSizeRack != 0 && curSplitSize >= minSizeRack) { // if there is a minimum size specified, then create a single split // otherwise, store these blocks into overflow data structure addCreatedSplit(splits, getHosts(racks), validBlocks); } else { // There were a few blocks in this rack that // remained to be processed. Keep them in 'overflow' block list. // These will be combined later. overflowBlocks.addAll(validBlocks); } } curSplitSize = 0; validBlocks.clear(); racks.clear(); } } assert blockToNodes.isEmpty(); assert curSplitSize == 0; assert validBlocks.isEmpty(); assert racks.isEmpty(); // Process all overflow blocks for (OneBlockInfo oneblock : overflowBlocks) { validBlocks.add(oneblock); curSplitSize += oneblock.length; // This might cause an exiting rack location to be re-added, // but it should be ok. for (int i = 0; i < oneblock.racks.length; i++) { racks.add(oneblock.racks[i]); } // if the accumulated split size exceeds the maximum, then // create this split. if (maxSize != 0 && curSplitSize >= maxSize) { // create an input split and add it to the splits array addCreatedSplit(splits, getHosts(racks), validBlocks); curSplitSize = 0; validBlocks.clear(); racks.clear(); } } // Process any remaining blocks, if any. if (!validBlocks.isEmpty()) { addCreatedSplit(splits, getHosts(racks), validBlocks); } }
From source file:com.dh.perfectoffer.event.framework.net.network.NetworkConnectionImpl.java
/** * Call the webservice using the given parameters to construct the request * and return the result.//from w w w.j a v a2s. co m * * @param context * The context to use for this operation. Used to generate the * user agent if needed. * @param urlValue * The webservice URL. * @param method * The request method to use. * @param parameterList * The parameters to add to the request. * @param headerMap * The headers to add to the request. * @param isGzipEnabled * Whether the request will use gzip compression if available on * the server. * @param userAgent * The user agent to set in the request. If null, a default * Android one will be created. * @param postText * The POSTDATA text to add in the request. * @param credentials * The credentials to use for authentication. * @param isSslValidationEnabled * Whether the request will validate the SSL certificates. * @return The result of the webservice call. */ public static ConnectionResult execute(Context context, String urlValue, Method method, ArrayList<BasicNameValuePair> parameterList, HashMap<String, String> headerMap, boolean isGzipEnabled, String userAgent, String postText, UsernamePasswordCredentials credentials, boolean isSslValidationEnabled, String contentType, List<byte[]> fileByteDates, List<String> fileMimeTypes, int httpErrorResCodeFilte, boolean isMulFiles) throws ConnectionException { HttpURLConnection connection = null; try { // Prepare the request information if (userAgent == null) { userAgent = UserAgentUtils.get(context); } if (headerMap == null) { headerMap = new HashMap<String, String>(); } headerMap.put(HTTP.USER_AGENT, userAgent); if (isGzipEnabled) { headerMap.put(ACCEPT_ENCODING_HEADER, "gzip"); } headerMap.put(ACCEPT_CHARSET_HEADER, UTF8_CHARSET); if (credentials != null) { headerMap.put(AUTHORIZATION_HEADER, createAuthenticationHeader(credentials)); } StringBuilder paramBuilder = new StringBuilder(); if (parameterList != null && !parameterList.isEmpty()) { for (int i = 0, size = parameterList.size(); i < size; i++) { BasicNameValuePair parameter = parameterList.get(i); String name = parameter.getName(); String value = parameter.getValue(); if (TextUtils.isEmpty(name)) { // Empty parameter name. Check the next one. continue; } if (value == null) { value = ""; } paramBuilder.append(URLEncoder.encode(name, UTF8_CHARSET)); paramBuilder.append("="); paramBuilder.append(URLEncoder.encode(value, UTF8_CHARSET)); paramBuilder.append("&"); } } // ? ByteArrayOutputStream bos = new ByteArrayOutputStream(); // Create the connection object URL url = null; String outputText = null; switch (method) { case GET: case DELETE: String fullUrlValue = urlValue; if (paramBuilder.length() > 0) { fullUrlValue += "?" + paramBuilder.toString(); } url = new URL(fullUrlValue); connection = HttpUrlConnectionHelper.openUrlConnection(url); break; case PUT: case POST: url = new URL(urlValue); connection = HttpUrlConnectionHelper.openUrlConnection(url); connection.setDoOutput(true); if (paramBuilder.length() > 0 && NetworkConnection.CT_DEFALUT.equals(contentType)) { // form // ? // headerMap.put(HTTP.CONTENT_TYPE, // "application/x-www-form-urlencoded"); outputText = paramBuilder.toString(); headerMap.put(HTTP.CONTENT_TYPE, contentType); headerMap.put(HTTP.CONTENT_LEN, String.valueOf(outputText.getBytes().length)); } else if (postText != null && (NetworkConnection.CT_JSON.equals(contentType) || NetworkConnection.CT_XML.equals(contentType))) { // body // ? // headerMap.put(HTTP.CONTENT_TYPE, "application/json"); // //add ?json??? headerMap.put(HTTP.CONTENT_TYPE, contentType); // add // ?json??? headerMap.put(HTTP.CONTENT_LEN, String.valueOf(postText.getBytes().length)); outputText = postText; // Log.e("newtewewerew", // "1111application/json------------------outputText222222:::"+outputText+"-------method::"+method+"----paramBuilder.length() :"+paramBuilder.length()+"----postText:"+postText // ); } else if (NetworkConnection.CT_MULTIPART.equals(contentType)) { // String[] Array = urlValue.split("/"); /*Boolean isFiles = false; if (Array[Array.length - 1].equals("clientRemarkPic")) { isFiles = true; }*/ if (null == fileByteDates || fileByteDates.size() <= 0) { throw new ConnectionException("file formdata no bytes data", NetworkConnection.EXCEPTION_CODE_FORMDATA_NOBYTEDATE); } headerMap.put(HTTP.CONTENT_TYPE, contentType + ";boundary=" + BOUNDARY); String bulidFormText = bulidFormText(parameterList); bos.write(bulidFormText.getBytes()); for (int i = 0; i < fileByteDates.size(); i++) { long currentTimeMillis = System.currentTimeMillis(); StringBuffer sb = new StringBuffer(""); sb.append(PREFIX).append(BOUNDARY).append(LINEND); // sb.append("Content-Type:application/octet-stream" + // LINEND); // sb.append("Content-Disposition: form-data; name=\""+nextInt+"\"; filename=\""+nextInt+".png\"").append(LINEND);; if (isMulFiles) sb.append("Content-Disposition: form-data; name=\"files\";filename=\"pic" + currentTimeMillis + ".png\"").append(LINEND); else sb.append("Content-Disposition: form-data; name=\"file\";filename=\"pic" + currentTimeMillis + ".png\"").append(LINEND); // sb.append("Content-Type:image/png" + LINEND); sb.append("Content-Type:" + fileMimeTypes.get(i) + LINEND); // sb.append("Content-Type:image/png" + LINEND); sb.append(LINEND); bos.write(sb.toString().getBytes()); bos.write(fileByteDates.get(i)); bos.write(LINEND.getBytes()); } byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes(); bos.write(end_data); bos.flush(); headerMap.put(HTTP.CONTENT_LEN, bos.size() + ""); } // L.e("newtewewerew", // "2222------------------outputText222222:::"+outputText+"-------method::"+method+"----paramBuilder.length() :"+paramBuilder.length()+"----postText:"+postText // ); break; } // Set the request method connection.setRequestMethod(method.toString()); // If it's an HTTPS request and the SSL Validation is disabled if (url.getProtocol().equals("https") && !isSslValidationEnabled) { HttpsURLConnection httpsConnection = (HttpsURLConnection) connection; httpsConnection.setSSLSocketFactory(getAllHostsValidSocketFactory()); httpsConnection.setHostnameVerifier(getAllHostsValidVerifier()); } // Add the headers if (!headerMap.isEmpty()) { for (Entry<String, String> header : headerMap.entrySet()) { connection.addRequestProperty(header.getKey(), header.getValue()); } } // Set the connection and read timeout connection.setConnectTimeout(OPERATION_TIMEOUT); connection.setReadTimeout(OPERATION_TIMEOUT); // Set the outputStream content for POST and PUT requests if ((method == Method.POST || method == Method.PUT)) { OutputStream output = null; try { if (NetworkConnection.CT_MULTIPART.equals(contentType)) { output = connection.getOutputStream(); output.write(bos.toByteArray()); } else { if (null != outputText) { L.e("newtewewerew", method + "------------------outputText:::" + outputText); output = connection.getOutputStream(); output.write(outputText.getBytes()); } } } finally { if (output != null) { try { output.close(); } catch (IOException e) { // Already catching the first IOException so nothing // to do here. } } } } // Log the request if (L.canLog(Log.DEBUG)) { L.d(TAG, "Request url: " + urlValue); L.d(TAG, "Method: " + method.toString()); if (parameterList != null && !parameterList.isEmpty()) { L.d(TAG, "Parameters:"); for (int i = 0, size = parameterList.size(); i < size; i++) { BasicNameValuePair parameter = parameterList.get(i); String message = "- \"" + parameter.getName() + "\" = \"" + parameter.getValue() + "\""; L.d(TAG, message); } L.d(TAG, "Parameters String: \"" + paramBuilder.toString() + "\""); } if (postText != null) { L.d(TAG, "Post data: " + postText); } if (headerMap != null && !headerMap.isEmpty()) { L.d(TAG, "Headers:"); for (Entry<String, String> header : headerMap.entrySet()) { L.d(TAG, "- " + header.getKey() + " = " + header.getValue()); } } } String contentEncoding = connection.getHeaderField(HTTP.CONTENT_ENCODING); int responseCode = connection.getResponseCode(); boolean isGzip = contentEncoding != null && contentEncoding.equalsIgnoreCase("gzip"); L.d(TAG, "Response code: " + responseCode); if (responseCode == HttpStatus.SC_MOVED_PERMANENTLY) { String redirectionUrl = connection.getHeaderField(LOCATION_HEADER); throw new ConnectionException("New location : " + redirectionUrl, redirectionUrl); } InputStream errorStream = connection.getErrorStream(); if (errorStream != null) { String error = convertStreamToString(errorStream, isGzip); // L.e("responseCode:"+responseCode+" httpErrorResCodeFilte:"+httpErrorResCodeFilte+" responseCode==httpErrorResCodeFilte:"+(responseCode==httpErrorResCodeFilte)); if (responseCode == httpErrorResCodeFilte) { // 400???... logResBodyAndHeader(connection, error); return new ConnectionResult(connection.getHeaderFields(), error, responseCode); } else { throw new ConnectionException(error, responseCode); } } String body = convertStreamToString(connection.getInputStream(), isGzip); // ?? ? if (null != body && body.contains("\r")) { body = body.replace("\r", ""); } if (null != body && body.contains("\n")) { body = body.replace("\n", ""); } logResBodyAndHeader(connection, body); return new ConnectionResult(connection.getHeaderFields(), body, responseCode); } catch (IOException e) { L.e(TAG, "IOException", e); throw new ConnectionException(e); } catch (KeyManagementException e) { L.e(TAG, "KeyManagementException", e); throw new ConnectionException(e); } catch (NoSuchAlgorithmException e) { L.e(TAG, "NoSuchAlgorithmException", e); throw new ConnectionException(e); } finally { if (connection != null) { connection.disconnect(); } } }
From source file:org.apache.hadoop.mapreduce.approx.lib.input.SampleTextInputFormat.java
/** * Return all the splits in the specified set of paths *///from w w w.j a v a 2 s. c o m private void getMoreSplits(JobContext job, Path[] paths, long maxSize, long minSizeNode, long minSizeRack, List<InputSplit> splits) throws IOException { Configuration conf = job.getConfiguration(); // all blocks for all the files in input set OneFileInfo[] files; // mapping from a rack name to the list of blocks it has HashMap<String, List<OneBlockInfo>> rackToBlocks = new HashMap<String, List<OneBlockInfo>>(); // mapping from a block to the nodes on which it has replicas HashMap<OneBlockInfo, String[]> blockToNodes = new HashMap<OneBlockInfo, String[]>(); // mapping from a node to the list of blocks that it contains HashMap<String, List<OneBlockInfo>> nodeToBlocks = new HashMap<String, List<OneBlockInfo>>(); files = new OneFileInfo[paths.length]; if (paths.length == 0) { return; } // populate all the blocks for all files //***************************************sampling info************************************* //long totLength = 0; for (int i = 0; i < paths.length; i++) { files[i] = new OneFileInfo(paths[i], conf, isSplitable(job, paths[i]), rackToBlocks, blockToNodes, nodeToBlocks, rackToNodes, maxSize); //totLength += files[i].getLength(); } ArrayList<OneBlockInfo> validBlocks = new ArrayList<OneBlockInfo>(); Set<String> nodes = new HashSet<String>(); long curSplitSize = 0; // process all nodes and create splits that are local // to a node. for (Iterator<Map.Entry<String, List<OneBlockInfo>>> iter = nodeToBlocks.entrySet().iterator(); iter .hasNext();) { Map.Entry<String, List<OneBlockInfo>> one = iter.next(); nodes.add(one.getKey()); List<OneBlockInfo> blocksInNode = one.getValue(); // for each block, copy it into validBlocks. Delete it from // blockToNodes so that the same block does not appear in // two different splits. for (OneBlockInfo oneblock : blocksInNode) { if (blockToNodes.containsKey(oneblock)) { validBlocks.add(oneblock); blockToNodes.remove(oneblock); //*******************************************segments compose splits**************** curSplitSize += oneblock.length; if (blockunit) { addCreatedSplit1(splits, validBlocks); curSplitSize = 0; validBlocks.clear(); continue; } // if the accumulated split size exceeds the maximum, then // create this split. if (maxSize != 0 && curSplitSize >= maxSize) { // create an input split and add it to the splits array addCreatedSplit(splits, nodes, validBlocks); curSplitSize = 0; validBlocks.clear(); } } } // if there were any blocks left over and their combined size is // larger than minSplitNode, then combine them into one split. // Otherwise add them back to the unprocessed pool. It is likely // that they will be combined with other blocks from the // same rack later on. if (minSizeNode != 0 && curSplitSize >= minSizeNode) { // create an input split and add it to the splits array addCreatedSplit(splits, nodes, validBlocks); } else { for (OneBlockInfo oneblock : validBlocks) { blockToNodes.put(oneblock, oneblock.hosts); } } validBlocks.clear(); nodes.clear(); curSplitSize = 0; } // if blocks in a rack are below the specified minimum size, then keep them // in 'overflow'. After the processing of all racks is complete, these // overflow blocks will be combined into splits. ArrayList<OneBlockInfo> overflowBlocks = new ArrayList<OneBlockInfo>(); Set<String> racks = new HashSet<String>(); // Process all racks over and over again until there is no more work to do. while (blockToNodes.size() > 0) { // Create one split for this rack before moving over to the next rack. // Come back to this rack after creating a single split for each of the // remaining racks. // Process one rack location at a time, Combine all possible blocks that // reside on this rack as one split. (constrained by minimum and maximum // split size). // iterate over all racks for (Iterator<Map.Entry<String, List<OneBlockInfo>>> iter = rackToBlocks.entrySet().iterator(); iter .hasNext();) { Map.Entry<String, List<OneBlockInfo>> one = iter.next(); racks.add(one.getKey()); List<OneBlockInfo> blocks = one.getValue(); // for each block, copy it into validBlocks. Delete it from // blockToNodes so that the same block does not appear in // two different splits. boolean createdSplit = false; for (OneBlockInfo oneblock : blocks) { if (blockToNodes.containsKey(oneblock)) { validBlocks.add(oneblock); blockToNodes.remove(oneblock); curSplitSize += oneblock.length; // if the accumulated split size exceeds the maximum, then // create this split. if (maxSize != 0 && curSplitSize >= maxSize) { // create an input split and add it to the splits array addCreatedSplit(splits, getHosts(racks), validBlocks); createdSplit = true; break; } } } // if we created a split, then just go to the next rack if (createdSplit) { curSplitSize = 0; validBlocks.clear(); racks.clear(); continue; } if (!validBlocks.isEmpty()) { if (minSizeRack != 0 && curSplitSize >= minSizeRack) { // if there is a minimum size specified, then create a single split // otherwise, store these blocks into overflow data structure addCreatedSplit(splits, getHosts(racks), validBlocks); } else { // There were a few blocks in this rack that // remained to be processed. Keep them in 'overflow' block list. // These will be combined later. overflowBlocks.addAll(validBlocks); } } curSplitSize = 0; validBlocks.clear(); racks.clear(); } } assert blockToNodes.isEmpty(); assert curSplitSize == 0; assert validBlocks.isEmpty(); assert racks.isEmpty(); // Process all overflow blocks for (OneBlockInfo oneblock : overflowBlocks) { validBlocks.add(oneblock); curSplitSize += oneblock.length; // This might cause an exiting rack location to be re-added, // but it should be ok. for (int i = 0; i < oneblock.racks.length; i++) { racks.add(oneblock.racks[i]); } // if the accumulated split size exceeds the maximum, then // create this split. if (maxSize != 0 && curSplitSize >= maxSize) { // create an input split and add it to the splits array addCreatedSplit(splits, getHosts(racks), validBlocks); curSplitSize = 0; validBlocks.clear(); racks.clear(); } } // Process any remaining blocks, if any. if (!validBlocks.isEmpty()) { addCreatedSplit(splits, getHosts(racks), validBlocks); } }
From source file:org.akaza.openclinica.control.submit.DataEntryServlet.java
@Override protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //JN:The following were the the global variables, moved as local. locale = LocaleResolver.getLocale(request); EventCRFBean ecb = (EventCRFBean) request.getAttribute(INPUT_EVENT_CRF); SectionBean sb = (SectionBean) request.getAttribute(SECTION_BEAN); ItemDataDAO iddao = new ItemDataDAO(getDataSource(), locale); HttpSession session = request.getSession(); StudyBean currentStudy = (StudyBean) session.getAttribute("study"); StudyUserRoleBean currentRole = (StudyUserRoleBean) session.getAttribute("userRole"); SectionDAO sdao = new SectionDAO(getDataSource()); /**//from w ww . jav a 2 s . c om * Determines whether the form was submitted. Calculated once in processRequest. The reason we don't use the normal means to determine if the form was * submitted (ie FormProcessor.isSubmitted) is because when we use forwardPage, Java confuses the inputs from the just-processed form with the inputs for * the forwarded-to page. This is a problem since frequently we're forwarding from one (submitted) section to the next (unsubmitted) section. If we use the * normal means, Java will always think that the unsubmitted section is, in fact, submitted. This member is guaranteed to be calculated before * shouldLoadDBValues() is called. */ boolean isSubmitted = false; boolean hasGroup = false; EventCRFDAO ecdao = null; FormProcessor fp = new FormProcessor(request); logMe("Enterting DataEntry Servlet" + System.currentTimeMillis()); EventDefinitionCRFDAO edcdao = new EventDefinitionCRFDAO(getDataSource()); FormDiscrepancyNotes discNotes; panel.setStudyInfoShown(false); String age = ""; UserAccountBean ub = (UserAccountBean) request.getSession().getAttribute(USER_BEAN_NAME); String instantAtt = CV_INSTANT_META + ecb.getCRFVersionId(); //for 11958: repeating groups rows appear if validation returns to the same section int isFirstTimeOnSection = fp.getInt("isFirstTimeOnSection"); request.setAttribute("isFirstTimeOnSection", isFirstTimeOnSection + ""); if (fp.getString(GO_EXIT).equals("") && !isSubmitted && fp.getString("tabId").equals("") && fp.getString("sectionId").equals("")) { //HashMap unavailableCRF = getUnavailableCRFList(); if (getCrfLocker().isLocked(ecb.getId())) { int userId = getCrfLocker().getLockOwner(ecb.getId()); UserAccountDAO udao = new UserAccountDAO(getDataSource()); UserAccountBean ubean = (UserAccountBean) udao.findByPK(userId); addPageMessage(resword.getString("CRF_unavailable") + " " + ubean.getName() + " " + resword.getString("Currently_entering_data") + " " + resword.getString("Leave_the_CRF"), request); forwardPage(Page.LIST_STUDY_SUBJECTS_SERVLET, request, response); } else { getCrfLocker().lock(ecb.getId(), ub.getId()); } } if (!ecb.isActive()) { throw new InconsistentStateException(Page.LIST_STUDY_SUBJECTS_SERVLET, resexception.getString("event_not_exists")); } logMe("Enterting DataEntry Get the status/number of item discrepancy notes" + System.currentTimeMillis()); // Get the status/number of item discrepancy notes DiscrepancyNoteDAO dndao = new DiscrepancyNoteDAO(getDataSource()); ArrayList<DiscrepancyNoteBean> allNotes = new ArrayList<DiscrepancyNoteBean>(); List<DiscrepancyNoteBean> eventCrfNotes = new ArrayList<DiscrepancyNoteBean>(); List<DiscrepancyNoteThread> noteThreads = new ArrayList<DiscrepancyNoteThread>(); // BWP: this try block is not necessary try { dndao = new DiscrepancyNoteDAO(getDataSource()); allNotes = dndao.findAllTopNotesByEventCRF(ecb.getId()); eventCrfNotes = dndao.findOnlyParentEventCRFDNotesFromEventCRF(ecb); if (!eventCrfNotes.isEmpty()) { allNotes.addAll(eventCrfNotes); } logMe("Entering DataEntry Create disc note threads out of the various notes" + System.currentTimeMillis()); // Create disc note threads out of the various notes DiscrepancyNoteUtil dNoteUtil = new DiscrepancyNoteUtil(); noteThreads = dNoteUtil.createThreadsOfParents(allNotes, getDataSource(), currentStudy, null, -1, true); // variables that provide values for the CRF discrepancy note header int updatedNum = 0; int openNum = 0; int closedNum = 0; int resolvedNum = 0; int notAppNum = 0; DiscrepancyNoteBean tempBean; for (DiscrepancyNoteThread dnThread : noteThreads) { /* * 3014: do not count parent beans, only the last child disc note of the thread. */ tempBean = dnThread.getLinkedNoteList().getLast(); if (tempBean != null) { if (ResolutionStatus.UPDATED.equals(tempBean.getResStatus())) { updatedNum++; } else if (ResolutionStatus.OPEN.equals(tempBean.getResStatus())) { openNum++; } else if (ResolutionStatus.CLOSED.equals(tempBean.getResStatus())) { // if (dn.getParentDnId() > 0){ closedNum++; // } } else if (ResolutionStatus.RESOLVED.equals(tempBean.getResStatus())) { // if (dn.getParentDnId() > 0){ resolvedNum++; // } } else if (ResolutionStatus.NOT_APPLICABLE.equals(tempBean.getResStatus())) { notAppNum++; } } } logMe("Entering DataEntry Create disc note threads out of the various notes DONE" + System.currentTimeMillis()); request.setAttribute("updatedNum", updatedNum + ""); request.setAttribute("openNum", openNum + ""); request.setAttribute("closedNum", closedNum + ""); request.setAttribute("resolvedNum", resolvedNum + ""); request.setAttribute("notAppNum", notAppNum + ""); String fromViewNotes = fp.getString("fromViewNotes"); if (fromViewNotes != null && "1".equals(fromViewNotes)) { request.setAttribute("fromViewNotes", fromViewNotes); } logMe("Entering Create studySubjDao.. ++++stuff" + System.currentTimeMillis()); StudySubjectDAO ssdao = new StudySubjectDAO(getDataSource()); StudySubjectBean ssb = (StudySubjectBean) ssdao.findByPK(ecb.getStudySubjectId()); // YW 11-07-2007, data entry could not be performed if its study subject // has been removed. // Notice: ViewSectionDataEntryServelet, ViewSectionDataEntryPreview, // PrintCRFServlet and PrintDataEntryServlet, have theirs own // processRequest Status s = ssb.getStatus(); if ("removed".equalsIgnoreCase(s.getName()) || "auto-removed".equalsIgnoreCase(s.getName())) { addPageMessage(respage.getString("you_may_not_perform_data_entry_on_a_CRF") + respage.getString("study_subject_has_been_deleted"), request); request.setAttribute("id", new Integer(ecb.getStudySubjectId()).toString()); session.removeAttribute(instantAtt); forwardPage(Page.VIEW_STUDY_SUBJECT_SERVLET, request, response); } // YW >> HashMap<String, String> newUploadedFiles = (HashMap<String, String>) session .getAttribute("newUploadedFiles"); if (newUploadedFiles == null) { newUploadedFiles = new HashMap<String, String>(); } request.setAttribute("newUploadedFiles", newUploadedFiles); if (!fp.getString("exitTo").equals("")) { request.setAttribute("exitTo", fp.getString("exitTo")); } //some EVENT CRF CHECK logMe("Entering some EVENT CRF CHECK" + System.currentTimeMillis()); if (!fp.getString(GO_EXIT).equals("")) { session.removeAttribute(GROUP_HAS_DATA); session.removeAttribute("to_create_crf"); session.removeAttribute("mayProcessUploading"); //Removing the user and EventCRF from the locked CRF List getCrfLocker().unlock(ecb.getId()); if (newUploadedFiles.size() > 0) { if (this.unloadFiles(newUploadedFiles)) { } else { String missed = ""; Iterator iter = newUploadedFiles.keySet().iterator(); while (iter.hasNext()) { missed += " " + newUploadedFiles.get(iter.next()); } addPageMessage(respage.getString("uploaded_files_not_deleted_or_not_exist") + ": " + missed, request); } } session.removeAttribute("newUploadedFiles"); addPageMessage(respage.getString("exit_without_saving"), request); // addPageMessage("You chose to exit the data entry page."); // changed bu jxu 03/06/2007- we should use redirection to go to // another servlet if (fromViewNotes != null && "1".equals(fromViewNotes)) { String viewNotesURL = (String) session.getAttribute("viewNotesURL"); if (viewNotesURL != null && viewNotesURL.length() > 0) { response.sendRedirect(response.encodeRedirectURL(viewNotesURL)); } return; } String fromResolvingNotes = fp.getString("fromResolvingNotes", true); String winLocation = (String) session.getAttribute(ViewNotesServlet.WIN_LOCATION); session.removeAttribute(instantAtt); if (!StringUtil.isBlank(fromResolvingNotes) && !StringUtil.isBlank(winLocation)) { response.sendRedirect(response.encodeRedirectURL(winLocation)); } else { if (!fp.getString("exitTo").equals("")) { response.sendRedirect(response.encodeRedirectURL(fp.getString("exitTo"))); } else response.sendRedirect(response.encodeRedirectURL("ListStudySubjects")); } // forwardPage(Page.SUBMIT_DATA_SERVLET); return; } logMe("Entering some EVENT CRF CHECK DONE" + System.currentTimeMillis()); // checks if the section has items in item group // for repeating items // hasGroup = getInputBeans(); hasGroup = checkGroups(fp, ecb); Boolean b = (Boolean) request.getAttribute(INPUT_IGNORE_PARAMETERS); isSubmitted = fp.isSubmitted() && b == null; // variable is used for fetching any null values like "not applicable" int eventDefinitionCRFId = 0; if (fp != null) { eventDefinitionCRFId = fp.getInt("eventDefinitionCRFId"); } StudyBean study = (StudyBean) session.getAttribute("study"); // constructs the list of items used on UI // tbh>> // logger.trace("trying event def crf id: "+eventDefinitionCRFId); logMe("Entering some EVENT DEF CRF CHECK " + System.currentTimeMillis()); if (eventDefinitionCRFId <= 0) { // TODO we have to get that id before we can continue EventDefinitionCRFBean edcBean = edcdao.findByStudyEventIdAndCRFVersionId(study, ecb.getStudyEventId(), ecb.getCRFVersionId()); eventDefinitionCRFId = edcBean.getId(); } logMe("Entering some EVENT DEF CRF CHECK DONE " + System.currentTimeMillis()); logMe("Entering some Study EVENT DEF CRF CHECK " + System.currentTimeMillis()); StudyEventDAO seDao = new StudyEventDAO(getDataSource()); EventDefinitionCRFBean edcBean = (EventDefinitionCRFBean) edcdao.findByPK(eventDefinitionCRFId); EventDefinitionCRFBean edcb = (EventDefinitionCRFBean) edcdao.findByPK(eventDefinitionCRFId); request.setAttribute(EVENT_DEF_CRF_BEAN, edcb);//JN:Putting the event_def_crf_bean in the request attribute. StudyEventBean studyEventBean = (StudyEventBean) seDao.findByPK(ecb.getStudyEventId()); edcBean.setId(eventDefinitionCRFId); StudyEventDefinitionDAO seddao = new StudyEventDefinitionDAO(getDataSource()); StudyEventDefinitionBean studyEventDefinition = (StudyEventDefinitionBean) seddao .findByPK(edcBean.getStudyEventDefinitionId()); CRFVersionDAO cvdao = new CRFVersionDAO(getDataSource()); CRFVersionBean crfVersionBean = (CRFVersionBean) cvdao.findByPK(ecb.getCRFVersionId()); Phase phase2 = Phase.INITIAL_DATA_ENTRY; if (getServletPage(request).equals(Page.DOUBLE_DATA_ENTRY_SERVLET)) { phase2 = Phase.DOUBLE_DATA_ENTRY; } else if (getServletPage(request).equals(Page.ADMIN_EDIT_SERVLET)) { phase2 = Phase.ADMIN_EDITING; } logMe("Entering ruleSets::: CreateAndInitializeRuleSet:::" + Thread.currentThread()); logMe("Entering ruleSets::: CreateAndInitializeRuleSet:::" + Thread.currentThread() + "currentStudy?" + currentStudy + "studyEventDefinition" + studyEventDefinition + "crfVersionBean" + crfVersionBean + "studyEventBean" + studyEventBean + "ecb" + ecb); // List<RuleSetBean> ruleSets = createAndInitializeRuleSet(currentStudy, studyEventDefinition, crfVersionBean, studyEventBean, ecb, true, request, response); // boolean shouldRunRules = getRuleSetService(request).shouldRunRulesForRuleSets(ruleSets, phase2); logMe("Entering getDisplayBean:::::Thread::::" + Thread.currentThread()); DisplaySectionBean section = getDisplayBean(hasGroup, false, request, isSubmitted); //hasSCDItem has been initialized in getDisplayBean() which is online above VariableSubstitutionHelper.replaceVariables(section, study, ssb, studyEventDefinition, studyEventBean, dataSource); if (section.getSection().hasSCDItem()) { SimpleConditionalDisplayService cds0 = (SimpleConditionalDisplayService) SpringServletAccess .getApplicationContext(getServletContext()).getBean("simpleConditionalDisplayService"); section = cds0.initConditionalDisplays(section); } logMe("Entering Find out the id of the section's first field " + System.currentTimeMillis()); // 2790: Find out the id of the section's first field String firstFieldId = getSectionFirstFieldId(section.getSection().getId()); request.setAttribute("formFirstField", firstFieldId); // logger.trace("now trying event def crf id: "+eventDefinitionCRFId); // above is necessary to give us null values during DDE // ironically, this only covers vertical null value result sets // horizontal ones are covered in FormBeanUtil, tbh 112007 logMe("Entering displayItemWithGroups " + System.currentTimeMillis()); //@pgawade 30-May-2012 Fix for issue 13963 - added an extra parameter 'isSubmitted' to method createItemWithGroups List<DisplayItemWithGroupBean> displayItemWithGroups = createItemWithGroups(section, hasGroup, eventDefinitionCRFId, request, isSubmitted); logMe("Entering displayItemWithGroups end " + System.currentTimeMillis()); this.getItemMetadataService().updateGroupDynamicsInSection(displayItemWithGroups, section.getSection().getId(), ecb); section.setDisplayItemGroups(displayItemWithGroups); DisplayTableOfContentsBean toc = TableOfContentsServlet.getDisplayBeanWithShownSections(getDataSource(), (DisplayTableOfContentsBean) request.getAttribute(TOC_DISPLAY), (DynamicsMetadataService) SpringServletAccess.getApplicationContext(getServletContext()) .getBean("dynamicsMetadataService")); request.setAttribute(TOC_DISPLAY, toc); LinkedList<Integer> sectionIdsInToc = TableOfContentsServlet.sectionIdsInToc(toc); // why do we get previousSec and nextSec here, rather than in // getDisplayBeans? // so that we can use them in forwarding the user to the previous/next // section // if the validation was successful logMe("Entering displayItemWithGroups sdao.findPrevious " + System.currentTimeMillis()); int sIndex = TableOfContentsServlet.sectionIndexInToc(section.getSection(), toc, sectionIdsInToc); SectionBean previousSec = this.prevSection(section.getSection(), ecb, toc, sIndex); logMe("Entering displayItemWithGroups sdao.findPrevious end " + System.currentTimeMillis()); SectionBean nextSec = this.nextSection(section.getSection(), ecb, toc, sIndex); section.setFirstSection(!previousSec.isActive()); section.setLastSection(!nextSec.isActive()); // this is for generating side info panel // and the information panel under the Title SubjectDAO subjectDao = new SubjectDAO(getDataSource()); StudyDAO studydao = new StudyDAO(getDataSource()); SubjectBean subject = (SubjectBean) subjectDao.findByPK(ssb.getSubjectId()); // Get the study then the parent study logMe("Entering Get the study then the parent study " + System.currentTimeMillis()); if (study.getParentStudyId() > 0) { // this is a site,find parent StudyBean parentStudy = (StudyBean) studydao.findByPK(study.getParentStudyId()); request.setAttribute("studyTitle", parentStudy.getName()); request.setAttribute("siteTitle", study.getName()); } else { request.setAttribute("studyTitle", study.getName()); } logMe("Entering Get the study then the parent study end " + System.currentTimeMillis()); // Let us process the age if (currentStudy.getStudyParameterConfig().getCollectDob().equals("1")) { // YW 11-16-2007 erollment-date is used for calculating age. Date enrollmentDate = ssb.getEnrollmentDate(); age = Utils.getInstacne().processAge(enrollmentDate, subject.getDateOfBirth()); } //ArrayList beans = ViewStudySubjectServlet.getDisplayStudyEventsForStudySubject(ssb, getDataSource(), ub, currentRole); request.setAttribute("studySubject", ssb); request.setAttribute("subject", subject); //request.setAttribute("beans", beans); request.setAttribute("eventCRF", ecb); request.setAttribute("age", age); request.setAttribute("decryptedPassword", ((SecurityManager) SpringServletAccess.getApplicationContext(getServletContext()) .getBean("securityManager")).encrytPassword("root", getUserDetails())); // set up interviewer name and date fp.addPresetValue(INPUT_INTERVIEWER, ecb.getInterviewerName()); if (ecb.getDateInterviewed() != null) { DateFormat local_df = new SimpleDateFormat(resformat.getString("date_format_string"), ResourceBundleProvider.getLocale()); String idateFormatted = local_df.format(ecb.getDateInterviewed()); fp.addPresetValue(INPUT_INTERVIEW_DATE, idateFormatted); } else { fp.addPresetValue(INPUT_INTERVIEW_DATE, ""); } setPresetValues(fp.getPresetValues(), request); logMe("Entering Checks !submitted " + System.currentTimeMillis()); if (!isSubmitted) { // TODO: prevent data enterer from seeing results of first round of // data // entry, if this is second round // FLAG--SLOW HERE WHEN LOADING logMe("Entering Checks !submitted entered " + System.currentTimeMillis()); long t = System.currentTimeMillis(); request.setAttribute(BEAN_DISPLAY, section); request.setAttribute(BEAN_ANNOTATIONS, getEventCRFAnnotations(request)); session.setAttribute("shouldRunValidation", null); session.setAttribute("rulesErrors", null); session.setAttribute(DataEntryServlet.NOTE_SUBMITTED, null); discNotes = new FormDiscrepancyNotes(); // discNotes = (FormDiscrepancyNotes) session.getAttribute(AddNewSubjectServlet.FORM_DISCREPANCY_NOTES_NAME); // if (discNotes == null) { // discNotes = new FormDiscrepancyNotes(); // } // << tbh 01/2010 section = populateNotesWithDBNoteCounts(discNotes, section, request); populateInstantOnChange(request.getSession(), ecb, section); LOGGER.debug( "+++ just ran populateNotes, printing field notes: " + discNotes.getFieldNotes().toString()); LOGGER.debug("found disc notes: " + discNotes.getNumExistingFieldNotes().toString()); session.setAttribute(AddNewSubjectServlet.FORM_DISCREPANCY_NOTES_NAME, discNotes); if (section.getSection().hasSCDItem()) { section = SCDItemDisplayInfo.generateSCDDisplayInfo(section, this.getServletPage(request).equals(Page.INITIAL_DATA_ENTRY) || this.getServletPage(request).equals(Page.ADMIN_EDIT_SERVLET) && !this.isAdminForcedReasonForChange(request)); } int keyId = ecb.getId(); session.removeAttribute(DoubleDataEntryServlet.COUNT_VALIDATE + keyId); setUpPanel(section); if (newUploadedFiles.size() > 0) { if (this.unloadFiles(newUploadedFiles)) { } else { String missed = ""; Iterator iter = newUploadedFiles.keySet().iterator(); while (iter.hasNext()) { missed += " " + newUploadedFiles.get(iter.next()); } addPageMessage(respage.getString("uploaded_files_not_deleted_or_not_exist") + ": " + missed, request); } } logMe("Entering Checks !submitted entered end forwarding page " + System.currentTimeMillis()); logMe("Time Took for this block" + (System.currentTimeMillis() - t)); forwardPage(getJSPPage(), request, response); return; } else { logMe("Entering Checks !submitted not entered " + System.currentTimeMillis()); // // VALIDATION / LOADING DATA // // If validation is required for this round, we will go through // each item and add an appropriate validation to the Validator // // Otherwise, we will just load the data into the DisplayItemBean // so that we can write to the database later. // // Validation is required if two conditions are met: // 1. The user clicked a "Save" button, not a "Confirm" button // 2. In this type of data entry servlet, when the user clicks // a Save button, the inputs are validated // boolean validate = fp.getBoolean(INPUT_CHECK_INPUTS) && validateInputOnFirstRound(); // did the user click a "Save" button? // is validation required in this type of servlet when the user // clicks // "Save"? // We can conclude that the user is trying to save data; therefore, // set a request // attribute indicating that default values for items shouldn't be // displayed // in the application UI that will subsequently be displayed // TODO: find a better, less random place for this // session.setAttribute(HAS_DATA_FLAG, true); // section.setCheckInputs(fp.getBoolean(INPUT_CHECK_INPUTS)); errors = new HashMap(); // ArrayList items = section.getItems(); discNotes = (FormDiscrepancyNotes) session .getAttribute(AddNewSubjectServlet.FORM_DISCREPANCY_NOTES_NAME); if (discNotes == null) { discNotes = new FormDiscrepancyNotes(); } // populateNotesWithDBNoteCounts(discNotes, section); // all items- inlcude items in item groups and other single items List<DisplayItemWithGroupBean> allItems = section.getDisplayItemGroups(); String attachedFilePath = Utils.getAttachedFilePath(currentStudy); DiscrepancyValidator v = new DiscrepancyValidator(request, discNotes); RuleValidator ruleValidator = new RuleValidator(request); LOGGER.debug("SZE 1 :: " + allItems.size()); logMe("Looping inside !submitted " + System.currentTimeMillis()); for (int i = 0; i < allItems.size(); i++) { LOGGER.trace("===itering through items: " + i); DisplayItemWithGroupBean diwg = allItems.get(i); if (diwg.isInGroup()) { // for the items in groups DisplayItemGroupBean dgb = diwg.getItemGroup(); List<DisplayItemGroupBean> dbGroups = diwg.getDbItemGroups(); //dbGroups = diwg.getItemGroups(); List<DisplayItemGroupBean> formGroups = new ArrayList<DisplayItemGroupBean>(); LOGGER.debug("got db item group size " + dbGroups.size()); if (validate) { // int manualGroups = getManualRows(dbGroups2); // logger.debug("+++ found manual rows from db group 2: " + manualGroups); LOGGER.debug("===IF VALIDATE NOT A SINGLE ITEM: got to this part in the validation loop: " + dgb.getGroupMetaBean().getName()); // TODO next marker tbh 112007 // formGroups = validateDisplayItemGroupBean(v, // dgb,dbGroups, formGroups, // ruleValidator,groupOrdinalPLusItemOid); formGroups = validateDisplayItemGroupBean(v, dgb, dbGroups, formGroups, request, response); LOGGER.debug("form group size after validation " + formGroups.size()); } else { LOGGER.debug("+++ELSE NOT A SINGLE ITEM: got to this part in the validation loop: " + dgb.getGroupMetaBean().getName()); formGroups = loadFormValueForItemGroup(dgb, dbGroups, formGroups, eventDefinitionCRFId, request); LOGGER.debug("form group size without validation " + formGroups.size()); } diwg.setItemGroup(dgb); diwg.setItemGroups(formGroups); allItems.set(i, diwg); } else {// other single items DisplayItemBean dib = diwg.getSingleItem(); // dib = (DisplayItemBean) allItems.get(i); if (validate) { // generate input name here? // DisplayItemGroupBean dgb = diwg.getItemGroup(); String itemName = getInputName(dib); // no Item group for single item, so just use blank // string as parameter for inputName dib = validateDisplayItemBean(v, dib, "", request);// this // should be // used, // otherwise, // DDE not // working-jxu LOGGER.debug("&&& found name: " + itemName); LOGGER.debug("input VALIDATE " + itemName + ": " + fp.getString(itemName)); // dib.loadFormValue(fp.getString(itemName)); LOGGER.debug("input " + itemName + " has a response set of " + dib.getMetadata().getResponseSet().getOptions().size() + " options"); } else { String itemName = getInputName(dib); LOGGER.debug("input NONVALIDATE " + itemName + ": " + fp.getString(itemName)); // dib.loadFormValue(itemName); dib = loadFormValue(dib, request); // String itemName = getInputName(dib); // dib = loadFormValue(itemName); } ArrayList children = dib.getChildren(); for (int j = 0; j < children.size(); j++) { DisplayItemBean child = (DisplayItemBean) children.get(j); // DisplayItemGroupBean dgb = diwg.getItemGroup(); String itemName = getInputName(child); child.loadFormValue(fp.getString(itemName)); if (validate) { // child = validateDisplayItemBean(v, child, // itemName, ruleValidator, groupOrdinalPLusItemOid, // false); child = validateDisplayItemBean(v, child, itemName, request); // was null changed value 092007 tbh } else { // child.loadFormValue(itemName); child = loadFormValue(child, request); } LOGGER.debug("Checking child value for " + itemName + ": " + child.getData().getValue()); children.set(j, child); } dib.setChildren(children); diwg.setSingleItem(runDynamicsItemCheck(dib, null, request)); // logger.trace("just set single item on line 447: // "+dib.getData().getValue()); // items.set(i, dib); LOGGER.debug(" I : " + i); allItems.set(i, diwg); } } logMe("Loop ended " + System.currentTimeMillis()); //JN: This is the list that contains all the scd-shown items. List<ItemBean> itemBeansWithSCDShown = new ArrayList<ItemBean>(); if (validate && section.getSection().hasSCDItem()) { logMe(" Validate and Loop " + System.currentTimeMillis()); for (int i = 0; i < allItems.size(); ++i) { DisplayItemBean dib = allItems.get(i).getSingleItem(); ItemFormMetadataBean ifmb = dib.getMetadata(); if (ifmb.getParentId() == 0) { if (dib.getScdData().getScdSetsForControl().size() > 0) { //for control item //dib has to loadFormValue first. Here loadFormValue has been done in validateDisplayItemBean(v, dib, "") section.setShowSCDItemIds(SimpleConditionalDisplayService .conditionalDisplayToBeShown(dib, section.getShowSCDItemIds())); } if (dib.getScdData().getScdItemMetadataBean().getScdItemFormMetadataId() > 0) { //for scd item //a control item is always before its scd item dib.setIsSCDtoBeShown( section.getShowSCDItemIds().contains(dib.getMetadata().getItemId())); if (dib.getIsSCDtoBeShown()) itemBeansWithSCDShown.add(dib.getItem()); validateSCDItemBean(v, dib); } ArrayList<DisplayItemBean> children = dib.getChildren(); for (int j = 0; j < children.size(); j++) { DisplayItemBean child = children.get(j); if (child.getScdData().getScdSetsForControl().size() > 0) { //for control item //dib has to loadFormValue first. Here loadFormValue has been done in validateDisplayItemBean(v, dib, "") section.setShowSCDItemIds(SimpleConditionalDisplayService .conditionalDisplayToBeShown(child, section.getShowSCDItemIds())); } if (child.getScdData().getScdItemMetadataBean().getScdItemFormMetadataId() > 0) { //for scd item //a control item is always before its scd item child.setIsSCDtoBeShown( section.getShowSCDItemIds().contains(child.getMetadata().getItemId())); if (child.getIsSCDtoBeShown()) itemBeansWithSCDShown.add(dib.getItem()); validateSCDItemBean(v, child); } } } } logMe(" Validate and Loop end " + System.currentTimeMillis()); } logMe(" Validate and Loop end " + System.currentTimeMillis()); //JN:calling again here, for the items with simple conditional display and rules. List<RuleSetBean> ruleSets = createAndInitializeRuleSet(currentStudy, studyEventDefinition, crfVersionBean, studyEventBean, ecb, true, request, response, itemBeansWithSCDShown); boolean shouldRunRules = getRuleSetService(request).shouldRunRulesForRuleSets(ruleSets, phase2); // this.getItemMetadataService().resetItemCounter(); HashMap<String, ArrayList<String>> groupOrdinalPLusItemOid = null; groupOrdinalPLusItemOid = runRules(allItems, ruleSets, true, shouldRunRules, MessageType.ERROR, phase2, ecb, request); logMe("allItems Loop begin " + System.currentTimeMillis()); for (int i = 0; i < allItems.size(); i++) { DisplayItemWithGroupBean diwg = allItems.get(i); if (diwg.isInGroup()) { // for the items in groups DisplayItemGroupBean dgb = diwg.getItemGroup(); List<DisplayItemGroupBean> dbGroups = diwg.getDbItemGroups(); //dbGroups = diwg.getItemGroups(); // tbh 01/2010 change the group list? List<DisplayItemGroupBean> formGroups = new ArrayList<DisplayItemGroupBean>(); // List<DisplayItemGroupBean> dbGroups2 = loadFormValueForItemGroup(dgb, dbGroups, formGroups, eventDefinitionCRFId); // jxu- this part need to be refined, why need to validate // items again? if (validate) { // int manualGroups = getManualRows(dbGroups2); // logger.debug("+++ found manual rows for db group2: " + manualGroups); formGroups = validateDisplayItemGroupBean(v, dgb, dbGroups, formGroups, ruleValidator, groupOrdinalPLusItemOid, request, response); // formGroups = validateDisplayItemGroupBean(v, dgb, // dbGroups, formGroups); LOGGER.debug("*** form group size after validation " + formGroups.size()); } diwg.setItemGroup(dgb); diwg.setItemGroups(formGroups); allItems.set(i, diwg); } else {// other single items DisplayItemBean dib = diwg.getSingleItem(); // dib = (DisplayItemBean) allItems.get(i); if (validate) { String itemName = getInputName(dib); dib = validateDisplayItemBean(v, dib, "", ruleValidator, groupOrdinalPLusItemOid, false, null, request);// // / dib = validateDisplayItemBean(v, dib, "");// this } ArrayList children = dib.getChildren(); for (int j = 0; j < children.size(); j++) { DisplayItemBean child = (DisplayItemBean) children.get(j); // DisplayItemGroupBean dgb = diwg.getItemGroup(); String itemName = getInputName(child); child.loadFormValue(fp.getString(itemName)); if (validate) { child = validateDisplayItemBean(v, child, "", ruleValidator, groupOrdinalPLusItemOid, false, null, request); // child = validateDisplayItemBean(v, child, // itemName); } children.set(j, child); LOGGER.debug(" J (children): " + j); } dib.setChildren(children); diwg.setSingleItem(runDynamicsItemCheck(dib, null, request)); LOGGER.debug(" I : " + i); allItems.set(i, diwg); } } logMe("allItems Loop end " + System.currentTimeMillis()); // YW, 2-1-2008 << // A map from item name to item bean object. HashMap<String, ItemBean> scoreItems = new HashMap<String, ItemBean>(); HashMap<String, String> scoreItemdata = new HashMap<String, String>(); HashMap<String, ItemDataBean> oldItemdata = prepareSectionItemdataObject(sb.getId(), request); // hold all item names of changed ItemBean in current section TreeSet<String> changedItems = new TreeSet<String>(); // holds complete disply item beans for checking against 'request // for change' restriction ArrayList<DisplayItemBean> changedItemsList = new ArrayList<DisplayItemBean>(); // key is repeating item name, value is its display item group bean HashMap<String, DisplayItemGroupBean> changedItemsMap = new HashMap<String, DisplayItemGroupBean>(); // key is itemid, value is set of itemdata-ordinal HashMap<Integer, TreeSet<Integer>> itemOrdinals = prepareItemdataOrdinals(request); // prepare item data for scoring updateDataOrdinals(allItems); section.setDisplayItemGroups(allItems); scoreItems = prepareScoreItems(request); scoreItemdata = prepareScoreItemdata(request); logMe("allItems 2 Loop begin " + System.currentTimeMillis()); for (int i = 0; i < allItems.size(); i++) { DisplayItemWithGroupBean diwb = allItems.get(i); if (diwb.isInGroup()) { List<DisplayItemGroupBean> dbGroups = diwb.getDbItemGroups(); for (int j = 0; j < dbGroups.size(); j++) { DisplayItemGroupBean displayGroup = dbGroups.get(j); List<DisplayItemBean> items = displayGroup.getItems(); if ("remove".equalsIgnoreCase(displayGroup.getEditFlag())) { for (DisplayItemBean displayItem : items) { int itemId = displayItem.getItem().getId(); int ordinal = displayItem.getData().getOrdinal(); if (itemOrdinals.containsKey(itemId)) { itemOrdinals.get(itemId).remove(ordinal); } if (scoreItemdata.containsKey(itemId + "_" + ordinal)) { scoreItemdata.remove(itemId + "_" + ordinal); } changedItems.add(displayItem.getItem().getName()); changedItemsList.add(displayItem); String formName = displayItem.getItem().getName(); // logger.debug("SET: formName:" + formName); if (displayGroup.isAuto()) { formName = getGroupItemInputName(displayGroup, displayGroup.getFormInputOrdinal(), displayItem); LOGGER.debug("GET: changed formName to " + formName); } else { formName = getGroupItemManualInputName(displayGroup, displayGroup.getFormInputOrdinal(), displayItem); LOGGER.debug("GET-MANUAL: changed formName to " + formName); } changedItemsMap.put(formName, displayGroup); LOGGER.debug("adding to changed items map: " + formName); } } } List<DisplayItemGroupBean> dgbs = diwb.getItemGroups(); int groupsize = dgbs.size(); HashMap<Integer, Integer> maxOrdinals = new HashMap<Integer, Integer>(); boolean first = true; for (int j = 0; j < dgbs.size(); j++) { DisplayItemGroupBean displayGroup = dgbs.get(j); List<DisplayItemBean> items = displayGroup.getItems(); boolean isAdd = "add".equalsIgnoreCase(displayGroup.getEditFlag()) ? true : false; for (DisplayItemBean displayItem : items) { ItemBean ib = displayItem.getItem(); String itemName = ib.getName(); int itemId = ib.getId(); if (first) { maxOrdinals.put(itemId, iddao.getMaxOrdinalForGroup(ecb, sb, displayGroup.getItemGroupBean())); } ItemDataBean idb = displayItem.getData(); String value = idb.getValue(); scoreItems.put(itemName, ib); int ordinal = displayItem.getData().getOrdinal(); if (isAdd && scoreItemdata.containsKey(itemId + "_" + ordinal)) { int formMax = 1; if (maxOrdinals.containsKey(itemId)) { formMax = maxOrdinals.get(itemId); } int dbMax = iddao.getMaxOrdinalForGroup(ecb, sb, displayGroup.getItemGroupBean()); ordinal = ordinal >= dbMax ? formMax + 1 : ordinal; maxOrdinals.put(itemId, ordinal); displayItem.getData().setOrdinal(ordinal); scoreItemdata.put(itemId + "_" + ordinal, value); } else { scoreItemdata.put(itemId + "_" + ordinal, value); } if (itemOrdinals.containsKey(itemId)) { itemOrdinals.get(itemId).add(ordinal); } else { TreeSet<Integer> ordinalSet = new TreeSet<Integer>(); ordinalSet.add(ordinal); itemOrdinals.put(itemId, ordinalSet); } if (isChanged(displayItem, oldItemdata, attachedFilePath)) { changedItems.add(itemName); changedItemsList.add(displayItem); String formName = displayItem.getItem().getName(); // logger.debug("SET: formName:" + formName); if (displayGroup.isAuto()) { formName = getGroupItemInputName(displayGroup, displayGroup.getFormInputOrdinal(), displayItem); LOGGER.debug("RESET: formName group-item-input:" + formName); } else { formName = getGroupItemManualInputName(displayGroup, displayGroup.getFormInputOrdinal(), displayItem); LOGGER.debug("RESET: formName group-item-input-manual:" + formName); } changedItemsMap.put(formName, displayGroup); LOGGER.debug("adding to changed items map: " + formName); } } first = false; } } else { DisplayItemBean dib = diwb.getSingleItem(); ItemBean ib = dib.getItem(); ItemDataBean idb = dib.getData(); int itemId = ib.getId(); String itemName = ib.getName(); String value = idb.getValue(); scoreItems.put(itemName, ib); // for items which are not in any group, their ordinal is // set as 1 TreeSet<Integer> ordinalset = new TreeSet<Integer>(); ordinalset.add(1); itemOrdinals.put(itemId, ordinalset); scoreItemdata.put(itemId + "_" + 1, value); if (isChanged(idb, oldItemdata, dib, attachedFilePath)) { changedItems.add(itemName); changedItemsList.add(dib); // changedItemsMap.put(dib.getItem().getName(), new // DisplayItemGroupBean()); } ArrayList children = dib.getChildren(); for (int j = 0; j < children.size(); j++) { DisplayItemBean child = (DisplayItemBean) children.get(j); ItemBean cib = child.getItem(); scoreItems.put(cib.getName(), cib); TreeSet<Integer> cordinalset = new TreeSet<Integer>(); cordinalset.add(1); itemOrdinals.put(itemId, cordinalset); scoreItemdata.put(cib.getId() + "_" + 1, child.getData().getValue()); if (isChanged(child.getData(), oldItemdata, child, attachedFilePath)) { changedItems.add(itemName); changedItemsList.add(child); // changedItemsMap.put(itemName, new // DisplayItemGroupBean()); } } } } logMe("allItems 2 Loop end " + System.currentTimeMillis()); // do calculation for 'calculation' and 'group-calculation' type // items // and write the result in DisplayItemBean's ItemDateBean - data ScoreItemValidator sv = new ScoreItemValidator(request, discNotes); // *** doing calc here, load it where? *** SessionManager sm = (SessionManager) request.getSession().getAttribute("sm"); ScoreCalculator sc = new ScoreCalculator(sm, ecb, ub); logMe("allItems 3 Loop begin " + System.currentTimeMillis()); for (int i = 0; i < allItems.size(); i++) { DisplayItemWithGroupBean diwb = allItems.get(i); if (diwb.isInGroup()) { List<DisplayItemGroupBean> dgbs = diwb.getItemGroups(); for (int j = 0; j < dgbs.size(); j++) { DisplayItemGroupBean displayGroup = dgbs.get(j); List<DisplayItemBean> items = displayGroup.getItems(); for (DisplayItemBean displayItem : items) { ItemFormMetadataBean ifmb = displayItem.getMetadata(); int responseTypeId = ifmb.getResponseSet().getResponseTypeId(); if (responseTypeId == 8 || responseTypeId == 9) { StringBuffer err = new StringBuffer(); ResponseOptionBean robBean = (ResponseOptionBean) ifmb.getResponseSet().getOptions() .get(0); String value = ""; String inputName = ""; // note that we have to use // getFormInputOrdinal() here, tbh 06/2009 if (displayGroup.isAuto()) { inputName = getGroupItemInputName(displayGroup, displayGroup.getFormInputOrdinal(), displayItem); LOGGER.debug("returning input name: " + inputName); } else { inputName = getGroupItemManualInputName(displayGroup, displayGroup.getFormInputOrdinal(), displayItem); LOGGER.debug("returning input name: " + inputName); } if (robBean.getValue().startsWith("func: getexternalvalue") || robBean.getValue().startsWith("func: getExternalValue")) { value = fp.getString(inputName); LOGGER.debug("*** just set " + fp.getString(inputName) + " for line 815 " + displayItem.getItem().getName() + " with input name " + inputName); } else { value = sc.doCalculation(displayItem, scoreItems, scoreItemdata, itemOrdinals, err, displayItem.getData().getOrdinal()); } displayItem.loadFormValue(value); if (isChanged(displayItem, oldItemdata, attachedFilePath)) { changedItems.add(displayItem.getItem().getName()); changedItemsList.add(displayItem); } request.setAttribute(inputName, value); if (validate) { displayItem = validateCalcTypeDisplayItemBean(sv, displayItem, inputName, request); if (err.length() > 0) { Validation validation = new Validation(Validator.CALCULATION_FAILED); validation.setErrorMessage(err.toString()); sv.addValidation(inputName, validation); } } } } } } else { DisplayItemBean dib = diwb.getSingleItem(); ItemFormMetadataBean ifmb = dib.getMetadata(); int responseTypeId = ifmb.getResponseSet().getResponseTypeId(); if (responseTypeId == 8 || responseTypeId == 9) { StringBuffer err = new StringBuffer(); ResponseOptionBean robBean = (ResponseOptionBean) ifmb.getResponseSet().getOptions().get(0); String value = ""; if (robBean.getValue().startsWith("func: getexternalvalue") || robBean.getValue().startsWith("func: getExternalValue")) { String itemName = getInputName(dib); value = fp.getString(itemName); LOGGER.debug("just set " + fp.getString(itemName) + " for " + dib.getItem().getName()); LOGGER.debug("found in fp: " + fp.getString(dib.getItem().getName())); // logger.debug("scoreitemdata: " + // scoreItemdata.toString()); } else { value = sc.doCalculation(dib, scoreItems, scoreItemdata, itemOrdinals, err, 1); } dib.loadFormValue(value); if (isChanged(dib.getData(), oldItemdata, dib, attachedFilePath)) { changedItems.add(dib.getItem().getName()); changedItemsList.add(dib); // changedItemsMap.put(dib.getItem().getName(), new // DisplayItemGroupBean()); } String inputName = getInputName(dib); request.setAttribute(inputName, value); if (validate) { dib = validateCalcTypeDisplayItemBean(sv, dib, "", request); if (err.length() > 0) { Validation validation = new Validation(Validator.CALCULATION_FAILED); validation.setErrorMessage(err.toString()); sv.addValidation(inputName, validation); } } } ArrayList children = dib.getChildren(); for (int j = 0; j < children.size(); j++) { DisplayItemBean child = (DisplayItemBean) children.get(j); ItemFormMetadataBean cifmb = child.getMetadata(); int resTypeId = cifmb.getResponseSet().getResponseTypeId(); if (resTypeId == 8 || resTypeId == 9) { StringBuffer cerr = new StringBuffer(); child.getDbData().setValue(child.getData().getValue()); ResponseOptionBean crobBean = (ResponseOptionBean) cifmb.getResponseSet().getOptions() .get(0); String cvalue = ""; if (crobBean.getValue().startsWith("func: getexternalvalue") || crobBean.getValue().startsWith("func: getExternalValue")) { String itemName = getInputName(child); cvalue = fp.getString(itemName); LOGGER.debug( "just set " + fp.getString(itemName) + " for " + child.getItem().getName()); } else { cvalue = sc.doCalculation(child, scoreItems, scoreItemdata, itemOrdinals, cerr, 1); } child.loadFormValue(cvalue); if (isChanged(child.getData(), oldItemdata, child, attachedFilePath)) { changedItems.add(child.getItem().getName()); changedItemsList.add(child); // changedItemsMap.put(child.getItem().getName(), // new DisplayItemGroupBean()); } String cinputName = getInputName(child); request.setAttribute(cinputName, cvalue); if (validate) { child = validateCalcTypeDisplayItemBean(sv, child, "", request); if (cerr.length() > 0) { Validation cvalidation = new Validation(Validator.CALCULATION_FAILED); cvalidation.setErrorMessage(cerr.toString()); sv.addValidation(cinputName, cvalidation); } } } children.set(j, child); } } } logMe("allItems 3 Loop end " + System.currentTimeMillis()); // YW >> // we have to do this since we loaded all the form values into the // display // item beans above // section.setItems(items); // setting this AFTER we populate notes - will that make a difference? section.setDisplayItemGroups(allItems); // logger.debug("+++ try to populate notes"); section = populateNotesWithDBNoteCounts(discNotes, section, request); populateInstantOnChange(request.getSession(), ecb, section); // logger.debug("+++ try to populate notes, got count of field notes: " + discNotes.getFieldNotes().toString()); if (currentStudy.getStudyParameterConfig().getInterviewerNameRequired().equals("yes")) { v.addValidation(INPUT_INTERVIEWER, Validator.NO_BLANKS); } if (currentStudy.getStudyParameterConfig().getInterviewDateRequired().equals("yes")) { v.addValidation(INPUT_INTERVIEW_DATE, Validator.NO_BLANKS); } if (!StringUtil.isBlank(fp.getString(INPUT_INTERVIEW_DATE))) { v.addValidation(INPUT_INTERVIEW_DATE, Validator.IS_A_DATE); v.alwaysExecuteLastValidation(INPUT_INTERVIEW_DATE); } if (section.getSection().hasSCDItem()) { section = SCDItemDisplayInfo.generateSCDDisplayInfo(section, this.getServletPage(request).equals(Page.INITIAL_DATA_ENTRY) || this.getServletPage(request).equals(Page.ADMIN_EDIT_SERVLET) && !this.isAdminForcedReasonForChange(request)); } // logger.debug("about to validate: " + v.getKeySet()); errors = v.validate(); // tbh >> if (this.isAdminForcedReasonForChange(request) && this.isAdministrativeEditing() && errors.isEmpty()) { // "You have changed data after this CRF was marked complete. " // + // "You must provide a Reason For Change discrepancy note for this item before you can save this updated information." String error = respage.getString("reason_for_change_error"); // "Please enter a reason for change discrepancy note before saving." // ; int nonforcedChanges = 0; // change everything here from changed items list to changed // items map if (changedItemsList.size() > 0) { LOGGER.debug("found admin force reason for change: changed items " + changedItems.toString() + " and changed items list: " + changedItemsList.toString() + " changed items map: " + changedItemsMap.toString()); logMe("DisplayItemBean Loop begin " + System.currentTimeMillis()); for (DisplayItemBean displayItem : changedItemsList) { String formName = getInputName(displayItem); ItemDataBean idb = displayItem.getData(); ItemBean item_bean = displayItem.getItem(); ItemFormMetadataBean ifmb = displayItem.getMetadata(); LOGGER.debug("-- found group label " + ifmb.getGroupLabel()); if (!ifmb.getGroupLabel().equalsIgnoreCase("Ungrouped") && !ifmb.getGroupLabel().equalsIgnoreCase("")) { // << tbh 11/2009 sometimes the group label is blank instead of ungrouped??? Iterator iter = changedItemsMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<String, DisplayItemGroupBean> pairs = (Map.Entry) iter.next(); String formName2 = pairs.getKey(); DisplayItemGroupBean dgb = pairs.getValue(); // logger.debug("found auto: " + // dgb.isAuto()); String testFormName = ""; if (dgb.isAuto()) { // testFormName = getGroupItemInputName(dgb, dgb.getFormInputOrdinal(), getManualRows(dgbs), displayItem); testFormName = getGroupItemInputName(dgb, dgb.getFormInputOrdinal(), displayItem); } else { testFormName = getGroupItemManualInputName(dgb, dgb.getFormInputOrdinal(), displayItem); } LOGGER.debug("found test form name: " + testFormName); // if our test is the same with both the display // item and the display group ... // logger.debug("comparing " + // testFormName + " and " + formName2); int existingNotes = dndao.findNumExistingNotesForItem(idb.getId()); if (testFormName.equals(formName2)) { formName = formName2; this.setReasonForChangeError(ecb, item_bean, idb, formName, error, request); changedItemsMap.remove(formName2); LOGGER.debug("form name changed: " + formName); break; // .., send it as the form name } // ... otherwise, don't touch it // how to tell vs. manual and just plain input? } } else { this.setReasonForChangeError(ecb, item_bean, idb, formName, error, request); LOGGER.debug("form name added: " + formName); } } logMe("DisplayItemBean Loop end " + System.currentTimeMillis()); } if (nonforcedChanges > 0) { // do smething here? } } LOGGER.debug("errors here: " + errors.toString()); // << logMe("error check Loop begin " + System.currentTimeMillis()); if (errors.isEmpty() && shouldRunRules) { LOGGER.debug("Errors was empty"); if (session.getAttribute("rulesErrors") != null) { // rules have already generated errors, Let's compare old // error list with new // error list, if lists not same show errors. HashMap h = ruleValidator.validate(); Set<String> a = (Set<String>) session.getAttribute("rulesErrors"); Set<String> ba = h.keySet(); Boolean showErrors = false; for (Object key : ba) { if (!a.contains(key)) { showErrors = true; } } if (showErrors) { errors = h; if (errors.size() > 0) { session.setAttribute("shouldRunValidation", "1"); session.setAttribute("rulesErrors", errors.keySet()); } else { session.setAttribute("shouldRunValidation", null); session.setAttribute("rulesErrors", null); } } else { session.setAttribute("shouldRunValidation", null); session.setAttribute("rulesErrors", null); } } else if (session.getAttribute("shouldRunValidation") != null && session.getAttribute("shouldRunValidation").toString().equals("1")) { session.setAttribute("shouldRunValidation", null); session.setAttribute("rulesErrors", null); } else { errors = ruleValidator.validate(); if (errors.size() > 0) { session.setAttribute("shouldRunValidation", "1"); session.setAttribute("rulesErrors", errors.keySet()); } } } if (!errors.isEmpty()) { LOGGER.debug("threw an error with data entry..."); // copying below three lines, tbh 03/2010 String[] textFields = { INPUT_INTERVIEWER, INPUT_INTERVIEW_DATE }; fp.setCurrentStringValuesAsPreset(textFields); setPresetValues(fp.getPresetValues(), request); // YW, 2-4-2008 << logMe("!errors if Loop begin " + System.currentTimeMillis()); HashMap<String, ArrayList<String>> siErrors = sv.validate(); if (siErrors != null && !siErrors.isEmpty()) { Iterator iter = siErrors.keySet().iterator(); while (iter.hasNext()) { String fieldName = iter.next().toString(); errors.put(fieldName, siErrors.get(fieldName)); } } // we should 'shift' the names here, tbh 02/2010 // need: total number of rows, manual rows, all row names // plus: error names Iterator iter2 = errors.keySet().iterator(); while (iter2.hasNext()) { String fieldName = iter2.next().toString(); LOGGER.debug("found error " + fieldName); } // for (int i = 0; i < allItems.size(); i++) { // DisplayItemWithGroupBean diwb = allItems.get(i); // // if (diwb.isInGroup()) { // List<DisplayItemGroupBean> dgbs = diwb.getItemGroups(); // logger.debug("found manual rows " + getManualRows(dgbs) + " and total rows " + dgbs.size() + " from ordinal " + diwb.getOrdinal()); // } // } errors = reshuffleErrorGroupNamesKK(errors, allItems, request); reshuffleReasonForChangeHashAndDiscrepancyNotes(allItems, request, ecb); // reset manual rows, so that we can catch errors correctly // but it needs to be set per block of repeating items? what if there are two or more? /* int manualRows = 0; // getManualRows(formGroups); for (int i = 0; i < allItems.size(); i++) { DisplayItemWithGroupBean diwb = allItems.get(i); if (diwb.isInGroup()) { List<DisplayItemGroupBean> dgbs = diwb.getItemGroups(); manualRows = getManualRows(dgbs); } } */ //request.setAttribute("manualRows", new Integer(manualRows)); Iterator iter3 = errors.keySet().iterator(); while (iter3.hasNext()) { String fieldName = iter3.next().toString(); LOGGER.debug("found error after shuffle " + fieldName); } //Mantis Issue: 8116. Parsist the markComplete chebox on error request.setAttribute("markComplete", fp.getString(INPUT_MARK_COMPLETE)); // << tbh, 02/2010 // YW >> // copied request.setAttribute(BEAN_DISPLAY, section); request.setAttribute(BEAN_ANNOTATIONS, fp.getString(INPUT_ANNOTATIONS)); setInputMessages(errors, request); addPageMessage(respage.getString("errors_in_submission_see_below"), request); request.setAttribute("hasError", "true"); // addPageMessage("To override these errors and keep the data as // you // entered it, click one of the \"Confirm\" buttons. "); // if (section.isCheckInputs()) { // addPageMessage("Please notice that you must enter data for // the // <b>required</b> entries."); // } // we do not save any DNs if we get here, so we have to set it back into session... session.setAttribute(AddNewSubjectServlet.FORM_DISCREPANCY_NOTES_NAME, discNotes); // << tbh 01/2010 setUpPanel(section); forwardPage(getJSPPage(), request, response); } else { //reshuffleReasonForChangeHashAndDiscrepancyNotes( allItems, request, ecb); LOGGER.debug("Do we hit this in save ?????"); logMe("Do we hit this in save ???? " + System.currentTimeMillis()); boolean success = true; boolean temp = true; // save interviewer name and date into DB ecb.setInterviewerName(fp.getString(INPUT_INTERVIEWER)); if (!StringUtil.isBlank(fp.getString(INPUT_INTERVIEW_DATE))) { ecb.setDateInterviewed(fp.getDate(INPUT_INTERVIEW_DATE)); } else { ecb.setDateInterviewed(null); } if (ecdao == null) { ecdao = new EventCRFDAO(getDataSource()); } // set validator id for DDE DataEntryStage stage = ecb.getStage(); if (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY_COMPLETE) || stage.equals(DataEntryStage.DOUBLE_DATA_ENTRY)) { ecb.setValidatorId(ub.getId()); } /* * if(studyEventBean.getSubjectEventStatus().equals(SubjectEventStatus .SIGNED)){ if(edcBean.isDoubleEntry()){ * ecb.setStage(DataEntryStage.DOUBLE_DATA_ENTRY_COMPLETE); }else{ ecb.setStage(DataEntryStage.INITIAL_DATA_ENTRY_COMPLETE); } } */ // for Administrative editing if (studyEventBean.getSubjectEventStatus().equals(SubjectEventStatus.SIGNED) && changedItemsList.size() > 0) { studyEventBean.setSubjectEventStatus(SubjectEventStatus.COMPLETED); studyEventBean.setUpdater(ub); studyEventBean.setUpdatedDate(new Date()); seDao.update(studyEventBean); } // If the Study Subject's Satus is signed and we save a section // , change status to available LOGGER.debug("Status of Study Subject {}", ssb.getStatus().getName()); if (ssb.getStatus() == Status.SIGNED && changedItemsList.size() > 0) { LOGGER.debug("Status of Study Subject is Signed we are updating"); StudySubjectDAO studySubjectDao = new StudySubjectDAO(getDataSource()); ssb.setStatus(Status.AVAILABLE); ssb.setUpdater(ub); ssb.setUpdatedDate(new Date()); studySubjectDao.update(ssb); } if (ecb.isSdvStatus() && changedItemsList.size() > 0) { LOGGER.debug("Status of Study Subject is SDV we are updating"); StudySubjectDAO studySubjectDao = new StudySubjectDAO(getDataSource()); ssb.setStatus(Status.AVAILABLE); ssb.setUpdater(ub); ssb.setUpdatedDate(new Date()); studySubjectDao.update(ssb); ecb.setSdvStatus(false); ecb.setSdvUpdateId(ub.getId()); } ecb = (EventCRFBean) ecdao.update(ecb); // save discrepancy notes into DB FormDiscrepancyNotes fdn = (FormDiscrepancyNotes) session .getAttribute(AddNewSubjectServlet.FORM_DISCREPANCY_NOTES_NAME); dndao = new DiscrepancyNoteDAO(getDataSource()); AddNewSubjectServlet.saveFieldNotes(INPUT_INTERVIEWER, fdn, dndao, ecb.getId(), "EventCRF", currentStudy); AddNewSubjectServlet.saveFieldNotes(INPUT_INTERVIEW_DATE, fdn, dndao, ecb.getId(), "EventCRF", currentStudy); // items = section.getItems(); allItems = section.getDisplayItemGroups(); int nextOrdinal = 0; LOGGER.debug("all items before saving into DB" + allItems.size()); this.output(allItems); //TODO:Seems longer here, check this logMe("DisplayItemWithGroupBean allitems4 " + System.currentTimeMillis()); for (int i = 0; i < allItems.size(); i++) { DisplayItemWithGroupBean diwb = allItems.get(i); // we don't write success = success && writeToDB here // since the short-circuit mechanism may prevent Java // from executing writeToDB. if (diwb.isInGroup()) { List<DisplayItemGroupBean> dgbs = diwb.getItemGroups(); // using the above gets us the correct number of manual groups, tbh 01/2010 List<DisplayItemGroupBean> dbGroups = diwb.getDbItemGroups(); LOGGER.debug("item group size: " + dgbs.size()); LOGGER.debug("item db-group size: " + dbGroups.size()); for (int j = 0; j < dgbs.size(); j++) { DisplayItemGroupBean displayGroup = dgbs.get(j); List<DisplayItemBean> items = displayGroup.getItems(); // this ordinal will only useful to create a new // item data // update an item data won't touch its ordinal // int nextOrdinal = iddao.getMaxOrdinalForGroup(ecb, sb, displayGroup.getItemGroupBean()) + 1; // Determine if any items in this group have data. If so we need to undelete and previously deleted items. boolean undelete = false; for (DisplayItemBean displayItem : items) { String currItemVal = displayItem.getData().getValue(); if (currItemVal != null && !currItemVal.equals("")) { undelete = true; break; } } for (DisplayItemBean displayItem : items) { String fileName = this.addAttachedFilePath(displayItem, attachedFilePath); boolean writeDN = true; displayItem.setEditFlag(displayGroup.getEditFlag()); LOGGER.debug("group item value: " + displayItem.getData().getValue()); // if ("add".equalsIgnoreCase(displayItem.getEditFlag()) && fileName.length() > 0 && !newUploadedFiles.containsKey(fileName)) { // displayItem.getData().setValue(""); // } //15350, this particular logic, takes into consideration that a DN is created properly as long as the item data record exists and it fails to get created when it doesnt. //so, we are expanding the logic from writeToDb method to avoid creating duplicate records. writeDN = writeDN(displayItem); //pulling from dataset instead of database and correcting the flawed logic of using the database ordinals as max ordinal... nextOrdinal = displayItem.getData().getOrdinal(); temp = writeToDB(displayItem, iddao, nextOrdinal, request); LOGGER.debug("just executed writeToDB - 1"); LOGGER.debug("next ordinal: " + nextOrdinal); // Undelete item if any item in the repeating group has data. if (undelete && displayItem.getDbData() != null && displayItem.getDbData().isDeleted()) { iddao.undelete(displayItem.getDbData().getId(), ub.getId()); } if (temp && newUploadedFiles.containsKey(fileName)) { newUploadedFiles.remove(fileName); } // maybe put ordinal in the place of j? maybe subtract max rows from next ordinal if j is gt // next ordinal? String inputName = getGroupItemInputName(displayGroup, j, displayItem); // String inputName2 = getGroupItemManualInputName(displayGroup, j, displayItem); if (!displayGroup.isAuto()) { LOGGER.trace("not auto"); inputName = this.getGroupItemManualInputName(displayGroup, j, displayItem); } //htaycher last DN is not stored for new rows // if (j == dgbs.size() - 1) { // // LAST ONE // logger.trace("last one"); // int ordinal = j - this.getManualRows(dgbs); // logger.debug("+++ found manual rows from line 1326: " + ordinal); // inputName = getGroupItemInputName(displayGroup, ordinal, displayItem); // } // logger.trace("&&& we get previous looking at input name: " + inputName + " " + inputName2); LOGGER.trace("&&& we get previous looking at input name: " + inputName); // input name 2 removed from below inputName = displayItem.getFieldName(); if (writeDN) { AddNewSubjectServlet.saveFieldNotes(inputName, fdn, dndao, displayItem.getData().getId(), "itemData", currentStudy, ecb.getId()); } success = success && temp; } } for (int j = 0; j < dbGroups.size(); j++) { DisplayItemGroupBean displayGroup = dbGroups.get(j); //JN: Since remove button is gone, the following code can be commented out, however it needs to be tested? Can be tackled when handling discrepancy note w/repeating groups issues. if ("remove".equalsIgnoreCase(displayGroup.getEditFlag())) { List<DisplayItemBean> items = displayGroup.getItems(); for (DisplayItemBean displayItem : items) { String fileName = this.addAttachedFilePath(displayItem, attachedFilePath); displayItem.setEditFlag(displayGroup.getEditFlag()); LOGGER.debug("group item value: " + displayItem.getData().getValue()); // if ("add".equalsIgnoreCase(displayItem.getEditFlag()) && fileName.length() > 0 && !newUploadedFiles.containsKey(fileName)) { // displayItem.getData().setValue(""); // } temp = writeToDB(displayItem, iddao, 0, request); LOGGER.debug("just executed writeToDB - 2"); if (temp && newUploadedFiles.containsKey(fileName)) { newUploadedFiles.remove(fileName); } // just use 0 here since update doesn't // touch ordinal success = success && temp; } } } } else { DisplayItemBean dib = diwb.getSingleItem(); // TODO work on this line // this.addAttachedFilePath(dib, attachedFilePath); String fileName = addAttachedFilePath(dib, attachedFilePath); boolean writeDN = writeDN(dib); temp = writeToDB(dib, iddao, 1, request); LOGGER.debug("just executed writeToDB - 3"); if (temp && (newUploadedFiles.containsKey(dib.getItem().getId() + "") || newUploadedFiles.containsKey(fileName))) { // so newUploadedFiles will contain only failed file // items; newUploadedFiles.remove(dib.getItem().getId() + ""); newUploadedFiles.remove(fileName); } String inputName = getInputName(dib); LOGGER.trace("3 - found input name: " + inputName); if (writeDN) AddNewSubjectServlet.saveFieldNotes(inputName, fdn, dndao, dib.getData().getId(), "itemData", currentStudy, ecb.getId()); success = success && temp; ArrayList childItems = dib.getChildren(); for (int j = 0; j < childItems.size(); j++) { DisplayItemBean child = (DisplayItemBean) childItems.get(j); this.addAttachedFilePath(child, attachedFilePath); writeDN = writeDN(child); temp = writeToDB(child, iddao, 1, request); LOGGER.debug("just executed writeToDB - 4"); if (temp && newUploadedFiles.containsKey(child.getItem().getId() + "")) { // so newUploadedFiles will contain only failed // file items; newUploadedFiles.remove(child.getItem().getId() + ""); } inputName = getInputName(child); if (writeDN) AddNewSubjectServlet.saveFieldNotes(inputName, fdn, dndao, child.getData().getId(), "itemData", currentStudy, ecb.getId()); success = success && temp; } } } logMe("DisplayItemWithGroupBean allitems4 end " + System.currentTimeMillis()); LOGGER.debug("running rules: " + phase2.name()); List<Integer> prevShownDynItemDataIds = shouldRunRules ? this.getItemMetadataService().getDynamicsItemFormMetadataDao() .findShowItemDataIdsInSection(section.getSection().getId(), ecb.getCRFVersionId(), ecb.getId()) : new ArrayList<Integer>(); logMe("DisplayItemWithGroupBean dryrun start" + System.currentTimeMillis()); HashMap<String, ArrayList<String>> rulesPostDryRun = runRules(allItems, ruleSets, false, shouldRunRules, MessageType.WARNING, phase2, ecb, request); HashMap<String, ArrayList<String>> errorsPostDryRun = new HashMap<String, ArrayList<String>>(); // additional step needed, run rules and see if any items are 'shown' AFTER saving data logMe("DisplayItemWithGroupBean dryrun end" + System.currentTimeMillis()); boolean inSameSection = false; logMe("DisplayItemWithGroupBean allitems4 " + System.currentTimeMillis()); if (!rulesPostDryRun.isEmpty()) { // in same section? // iterate through the OIDs and see if any of them belong to this section Iterator iter3 = rulesPostDryRun.keySet().iterator(); while (iter3.hasNext()) { String fieldName = iter3.next().toString(); LOGGER.debug("found oid after post dry run " + fieldName); // set up a listing of OIDs in the section // BUT: Oids can have the group name in them. int ordinal = -1; String newFieldName = fieldName; String[] fieldNames = fieldName.split("\\."); if (fieldNames.length == 2) { newFieldName = fieldNames[1]; // check items in item groups here? if (fieldNames[0].contains("[")) { int p1 = fieldNames[0].indexOf("["); int p2 = fieldNames[0].indexOf("]"); try { ordinal = Integer.valueOf(fieldNames[0].substring(p1 + 1, p2)); } catch (NumberFormatException e) { ordinal = -1; } fieldNames[0] = fieldNames[0].substring(0, p1); } } List<DisplayItemWithGroupBean> displayGroupsWithItems = section.getDisplayItemGroups(); //ArrayList<DisplayItemBean> displayItems = section.getItems(); for (int i = 0; i < displayGroupsWithItems.size(); i++) { DisplayItemWithGroupBean itemWithGroup = displayGroupsWithItems.get(i); if (itemWithGroup.isInGroup()) { LOGGER.debug("found group: " + fieldNames[0]); // do something there List<DisplayItemGroupBean> digbs = itemWithGroup.getItemGroups(); LOGGER.debug("digbs size: " + digbs.size()); for (int j = 0; j < digbs.size(); j++) { DisplayItemGroupBean displayGroup = digbs.get(j); if (displayGroup.getItemGroupBean().getOid().equals(fieldNames[0]) && displayGroup.getOrdinal() == ordinal - 1) { List<DisplayItemBean> items = displayGroup.getItems(); for (int k = 0; k < items.size(); k++) { DisplayItemBean dib = items.get(k); if (dib.getItem().getOid().equals(newFieldName)) { //inSameSection = true; if (!dib.getMetadata().isShowItem()) { LOGGER.debug("found item in group " + this.getGroupItemInputName(displayGroup, j, dib) + " vs. " + fieldName + " and is show item: " + dib.getMetadata().isShowItem()); dib.getMetadata().setShowItem(true); } if (prevShownDynItemDataIds == null || !prevShownDynItemDataIds .contains(dib.getData().getId())) { inSameSection = true; errorsPostDryRun.put( this.getGroupItemInputName(displayGroup, j, dib), rulesPostDryRun.get(fieldName)); } } items.set(k, dib); } displayGroup.setItems(items); digbs.set(j, displayGroup); } } itemWithGroup.setItemGroups(digbs); } else { DisplayItemBean displayItemBean = itemWithGroup.getSingleItem(); ItemBean itemBean = displayItemBean.getItem(); if (newFieldName.equals(itemBean.getOid())) { //System.out.println("is show item for " + displayItemBean.getItem().getId() + ": " + displayItemBean.getMetadata().isShowItem()); //System.out.println("check run dynamics item check " + runDynamicsItemCheck(displayItemBean).getMetadata().isShowItem()); if (!displayItemBean.getMetadata().isShowItem()) { // double check there? LOGGER.debug("found item " + this.getInputName(displayItemBean) + " vs. " + fieldName + " and is show item: " + displayItemBean.getMetadata().isShowItem()); // if is repeating, use the other input name? no displayItemBean.getMetadata().setShowItem(true); if (prevShownDynItemDataIds == null || !prevShownDynItemDataIds .contains(displayItemBean.getData().getId())) { inSameSection = true; errorsPostDryRun.put(this.getInputName(displayItemBean), rulesPostDryRun.get(fieldName)); } } } itemWithGroup.setSingleItem(displayItemBean); } displayGroupsWithItems.set(i, itemWithGroup); } logMe("DisplayItemWithGroupBean allitems4 end,begin" + System.currentTimeMillis()); // check groups //List<DisplayItemGroupBean> itemGroups = new ArrayList<DisplayItemGroupBean>(); //itemGroups = section.getDisplayFormGroups(); // But in jsp: section.displayItemGroups.itemGroup.groupMetaBean.showGroup List<DisplayItemWithGroupBean> itemGroups = section.getDisplayItemGroups(); // List<DisplayItemGroupBean> newItemGroups = new ArrayList<DisplayItemGroupBean>(); for (DisplayItemWithGroupBean itemGroup : itemGroups) { DisplayItemGroupBean displayGroup = itemGroup.getItemGroup(); if (newFieldName.equals(displayGroup.getItemGroupBean().getOid())) { if (!displayGroup.getGroupMetaBean().isShowGroup()) { inSameSection = true; LOGGER.debug("found itemgroup " + displayGroup.getItemGroupBean().getOid() + " vs. " + fieldName + " and is show item: " + displayGroup.getGroupMetaBean().isShowGroup()); // hmmm how to set highlighting for a group? errorsPostDryRun.put(displayGroup.getItemGroupBean().getOid(), rulesPostDryRun.get(fieldName)); displayGroup.getGroupMetaBean().setShowGroup(true); // add necessary rows to the display group here???? // we have to set the items in the itemGroup for the displayGroup loadItemsWithGroupRows(itemGroup, sb, edcb, ecb, request); } } // newItemGroups.add(displayGroup); } logMe("DisplayItemWithGroupBean allitems4 end,end" + System.currentTimeMillis()); // trying to reset the display form groups here, tbh // section.setItems(displayItems); section.setDisplayItemGroups(displayGroupsWithItems); populateInstantOnChange(request.getSession(), ecb, section); // section.setDisplayFormGroups(newDisplayBean.getDisplayFormGroups()); } // this.getItemMetadataService().updateGroupDynamicsInSection(displayItemWithGroups, section.getSection().getId(), ecb); toc = TableOfContentsServlet.getDisplayBeanWithShownSections(getDataSource(), (DisplayTableOfContentsBean) request.getAttribute(TOC_DISPLAY), (DynamicsMetadataService) SpringServletAccess.getApplicationContext(getServletContext()) .getBean("dynamicsMetadataService")); request.setAttribute(TOC_DISPLAY, toc); sectionIdsInToc = TableOfContentsServlet.sectionIdsInToc(toc); sIndex = TableOfContentsServlet.sectionIndexInToc(section.getSection(), toc, sectionIdsInToc); previousSec = this.prevSection(section.getSection(), ecb, toc, sIndex); nextSec = this.nextSection(section.getSection(), ecb, toc, sIndex); section.setFirstSection(!previousSec.isActive()); section.setLastSection(!nextSec.isActive()); // // we need the following for repeating groups, tbh // >> tbh 06/2010 // List<DisplayItemWithGroupBean> displayItemWithGroups2 = createItemWithGroups(section, hasGroup, eventDefinitionCRFId); // section.setDisplayItemGroups(displayItemWithGroups2); // if so, stay at this section LOGGER.debug(" in same section: " + inSameSection); if (inSameSection) { // copy of one line from early on around line 400, forcing a re-show of the items // section = getDisplayBean(hasGroup, true);// include all items, tbh // below a copy of three lines from the if errors = true line, tbh 03/2010 String[] textFields = { INPUT_INTERVIEWER, INPUT_INTERVIEW_DATE }; fp.setCurrentStringValuesAsPreset(textFields); setPresetValues(fp.getPresetValues(), request); // below essetially a copy except for rulesPostDryRun request.setAttribute(BEAN_DISPLAY, section); request.setAttribute(BEAN_ANNOTATIONS, fp.getString(INPUT_ANNOTATIONS)); setInputMessages(errorsPostDryRun, request); addPageMessage(respage.getString("your_answers_activated_hidden_items"), request); request.setAttribute("hasError", "true"); request.setAttribute("hasShown", "true"); session.setAttribute(AddNewSubjectServlet.FORM_DISCREPANCY_NOTES_NAME, discNotes); setUpPanel(section); forwardPage(getJSPPage(), request, response); } } if (!inSameSection) {// else if not in same section, progress as usual /* toc = TableOfContentsServlet.getDisplayBeanWithShownSections(getDataSource(), (DisplayTableOfContentsBean) request.getAttribute(TOC_DISPLAY), (DynamicsMetadataService) SpringServletAccess.getApplicationContext(getServletContext()).getBean("dynamicsMetadataService")); request.setAttribute(TOC_DISPLAY, toc); sectionIdsInToc = TableOfContentsServlet.sectionIdsInToc(toc); sIndex = TableOfContentsServlet.sectionIndexInToc(section.getSection(), toc, sectionIdsInToc); previousSec = this.prevSection(section.getSection(), ecb, toc, sIndex); nextSec = this.nextSection(section.getSection(), ecb, toc, sIndex); section.setFirstSection(!previousSec.isActive()); section.setLastSection(!nextSec.isActive()); */ // can we just forward page or do we actually need an ELSE here? // yes, we do. tbh 05/03/2010 ArrayList<String> updateFailedItems = sc.redoCalculations(scoreItems, scoreItemdata, changedItems, itemOrdinals, sb.getId()); success = updateFailedItems.size() > 0 ? false : true; // now check if CRF is marked complete boolean markComplete = fp.getString(INPUT_MARK_COMPLETE).equals(VALUE_YES); boolean markSuccessfully = false; // if the CRF was marked // complete // successfully if (markComplete && section.isLastSection()) { LOGGER.debug("need to mark CRF as complete"); markSuccessfully = markCRFComplete(request); LOGGER.debug("...marked CRF as complete: " + markSuccessfully); if (!markSuccessfully) { request.setAttribute(BEAN_DISPLAY, section); request.setAttribute(BEAN_ANNOTATIONS, fp.getString(INPUT_ANNOTATIONS)); setUpPanel(section); forwardPage(getJSPPage(), request, response); return; } } // now write the event crf bean to the database String annotations = fp.getString(INPUT_ANNOTATIONS); setEventCRFAnnotations(annotations, request); Date now = new Date(); ecb.setUpdatedDate(now); ecb.setUpdater(ub); ecb = (EventCRFBean) ecdao.update(ecb); success = success && ecb.isActive(); StudyEventDAO sedao = new StudyEventDAO(getDataSource()); StudyEventBean seb = (StudyEventBean) sedao.findByPK(ecb.getStudyEventId()); seb.setUpdatedDate(now); seb.setUpdater(ub); seb = (StudyEventBean) sedao.update(seb); success = success && seb.isActive(); request.setAttribute(INPUT_IGNORE_PARAMETERS, Boolean.TRUE); if (newUploadedFiles.size() > 0) { if (this.unloadFiles(newUploadedFiles)) { } else { String missed = ""; Iterator iter = newUploadedFiles.keySet().iterator(); while (iter.hasNext()) { missed += " " + newUploadedFiles.get(iter.next()); } addPageMessage( respage.getString("uploaded_files_not_deleted_or_not_exist") + ": " + missed, request); } } if (!success) { // YW, 3-6-2008 << if (updateFailedItems.size() > 0) { String mess = ""; for (String ss : updateFailedItems) { mess += ss + ", "; } mess = mess.substring(0, mess.length() - 2); addPageMessage(resexception.getString("item_save_failed_because_database_error") + mess, request); } else { // YW>> addPageMessage(resexception.getString("database_error"), request); } request.setAttribute(BEAN_DISPLAY, section); session.removeAttribute(GROUP_HAS_DATA); session.removeAttribute(HAS_DATA_FLAG); session.removeAttribute(DDE_PROGESS); session.removeAttribute(AddNewSubjectServlet.FORM_DISCREPANCY_NOTES_NAME); LOGGER.debug("try to remove to_create_crf"); session.removeAttribute("to_create_crf"); session.removeAttribute(instantAtt); // forwardPage(Page.SUBMIT_DATA_SERVLET); forwardPage(Page.LIST_STUDY_SUBJECTS_SERVLET, request, response); // >> changed tbh, 06/2009 } else { boolean forwardingSucceeded = false; if (!fp.getString(GO_PREVIOUS).equals("")) { if (previousSec.isActive()) { forwardingSucceeded = true; request.setAttribute(INPUT_EVENT_CRF, ecb); request.setAttribute(INPUT_SECTION, previousSec); int tabNum = 0; if (fp.getString("tab") == null) { tabNum = 1; } else { tabNum = fp.getInt("tab"); } request.setAttribute("tab", new Integer(tabNum - 1).toString()); // forwardPage(getServletPage(request), request, response); getServletContext().getRequestDispatcher(getServletPage(request)).forward(request, response); } } else if (!fp.getString(GO_NEXT).equals("")) { if (nextSec.isActive()) { forwardingSucceeded = true; request.setAttribute(INPUT_EVENT_CRF, ecb); request.setAttribute(INPUT_SECTION, nextSec); int tabNum = 0; if (fp.getString("tab") == null) { tabNum = 1; } else { tabNum = fp.getInt("tab"); } request.setAttribute("tab", new Integer(tabNum + 1).toString()); getServletContext().getRequestDispatcher(getServletPage(request)).forward(request, response); //forwardPage(getServletPage(request), request, response); } } if (!forwardingSucceeded) { // request.setAttribute(TableOfContentsServlet. // INPUT_EVENT_CRF_BEAN, // ecb); if (markSuccessfully) { addPageMessage(respage.getString("data_saved_CRF_marked_complete"), request); session.removeAttribute(AddNewSubjectServlet.FORM_DISCREPANCY_NOTES_NAME); session.removeAttribute(GROUP_HAS_DATA); session.removeAttribute(HAS_DATA_FLAG); session.removeAttribute(DDE_PROGESS); session.removeAttribute("to_create_crf"); request.setAttribute("eventId", new Integer(ecb.getStudyEventId()).toString()); forwardPage(Page.ENTER_DATA_FOR_STUDY_EVENT_SERVLET, request, response); } else { // use clicked 'save' addPageMessage(respage.getString("data_saved_continue_entering_edit_later"), request); request.setAttribute(INPUT_EVENT_CRF, ecb); request.setAttribute(INPUT_EVENT_CRF_ID, new Integer(ecb.getId()).toString()); // forward to the next section if the previous one // is not the last section if (!section.isLastSection()) { request.setAttribute(INPUT_SECTION, nextSec); request.setAttribute(INPUT_SECTION_ID, new Integer(nextSec.getId()).toString()); session.removeAttribute("mayProcessUploading"); } else if (section.isLastSection()) { //JN ADDED TO avoid return down // already the last section, should go back to // view event page session.removeAttribute(GROUP_HAS_DATA); session.removeAttribute(HAS_DATA_FLAG); session.removeAttribute(DDE_PROGESS); session.removeAttribute("to_create_crf"); session.removeAttribute("mayProcessUploading"); request.setAttribute("eventId", new Integer(ecb.getStudyEventId()).toString()); if (fromViewNotes != null && "1".equals(fromViewNotes)) { String viewNotesPageFileName = (String) session .getAttribute("viewNotesPageFileName"); session.removeAttribute("viewNotesPageFileName"); session.removeAttribute("viewNotesURL"); if (viewNotesPageFileName != null && viewNotesPageFileName.length() > 0) { // forwardPage(Page.setNewPage(viewNotesPageFileName, "View Notes"), request, response); getServletContext().getRequestDispatcher(viewNotesPageFileName) .forward(request, response); } } session.removeAttribute(instantAtt); forwardPage(Page.ENTER_DATA_FOR_STUDY_EVENT_SERVLET, request, response); return; } int tabNum = 0; if (fp.getString("tab") == null) { tabNum = 1; } else { tabNum = fp.getInt("tab"); } if (!section.isLastSection()) { request.setAttribute("tab", new Integer(tabNum + 1).toString()); } // forwardPage(getServletPage(request), request, response); getServletContext().getRequestDispatcher(getServletPage(request)).forward(request, response); } // session.removeAttribute(AddNewSubjectServlet. // FORM_DISCREPANCY_NOTES_NAME); // forwardPage(Page.SUBMIT_DATA_SERVLET); } } } // end of if-block for dynamic rules not in same section, tbh 05/2010 } // end of save } }
From source file:com.pari.pcb.zip.ZIPProcessor.java
private void processShowTechFile(String fileName, boolean ignoreBanner, InputStreamGetter isGetter, DSPZipImportData d) throws IOException { String cmd = "unknown"; boolean cmdNeeded = true; StringBuffer cmdOutput = new StringBuffer(); HashMap<String /* cmd */, byte[] /* response */> cmdOutputs = new HashMap<String, byte[]>(); String ipAddress = null;// w w w.j a v a 2 s . c o m String newIpAddress = null; boolean isnxos = false; boolean firstcmd = true; // System.err.println("*** Processing " + contents.size() + " lines"); int lineno = 0; boolean insideBanner = false; int linesInsideBanner = 0; InputStream is = null; try { is = isGetter.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = reader.readLine()) != null) { if (!ignoreBanner) { // note: If the configuration is // pulled using tftp copy, then the banner contains some unprintable characters (ETX=003) // instead of ^C. if (insideBanner) { if (bannerEndPattern.matcher(line).matches()) { insideBanner = false; } else { int idx = line.indexOf(3); if (idx >= 0) { insideBanner = false; } } linesInsideBanner++; if (cmdNeeded) { cmdOutput.append(trimShowTechLine(line)); } continue; } else { if (bannerStartPattern.matcher(line).matches()) { insideBanner = true; if (bannerSameLinePattern.matcher(line).matches()) { insideBanner = false; } } else if (bannerStartPattern1.matcher(line).matches()) { int idx1 = line.indexOf(3); if (idx1 >= 0) { insideBanner = true; int idx2 = line.lastIndexOf(3); if (idx2 > idx1) { insideBanner = false; } } if (cmdNeeded) { cmdOutput.append(trimShowTechLine(line)); } continue; } } } lineno++; Matcher m1; boolean showTechStart = false; boolean showTechCommand = false; String matchingPattern = null; if (d != null) { Map<String, Object> map = d.getAttributes(); Iterator entries = map.entrySet().iterator(); while (entries.hasNext()) { Entry thisEntry = (Entry) entries.next(); String pattern = thisEntry.getKey().toString(); m1 = Pattern.compile(pattern).matcher(line); if (m1.matches()) { DevProperties prop = (DevProperties) thisEntry.getValue(); Map<String, String> prop1 = prop.getProperty(); Iterator it = prop1.entrySet().iterator(); while (it.hasNext()) { Entry thisEntry1 = (Entry) it.next(); if (thisEntry1.getKey().toString().equals("showTechStartPattern")) { showTechStart = true; } else if (thisEntry1.getKey().toString().equals("showTechCommandPattern")) { showTechCommand = true; matchingPattern = pattern; } } } } } boolean matched = false; if (line.contains("!! IOS XR Configuration")) { isIOSXRtechfile = true; } // if (line.contains("Cisco Adaptive Security Appliance Software Version") || // line.contains("Cisco PIX")) // { // showTechStart = true; // } if (showTechStart) { if (firstcmd) { // Done with current device. Another show tech starts now. // Add the device that is read so far. addCmdOutput(fileName, cmd, cmdOutput, cmdOutputs); if (!cmdOutputs.isEmpty()) { addShowTechFile(fileName, cmdOutputs, ipAddress, d); } // cmdOutputs = new HashMap<String, byte[]>(); cmd = "unknown"; cmdNeeded = true; cmdOutput = new StringBuffer(); ipAddress = newIpAddress; newIpAddress = null; firstcmd = false; continue; } } m1 = ipAddrFromShowTech.matcher(line); matched = m1.matches(); if (matched) { newIpAddress = m1.group(1).trim(); } boolean cmdstart = false; matched = showTechCommand; if (matched) { cmdstart = true; } else { Matcher m = ipsshowTechCommandPattern.matcher(line); if (m.matches()) { if (firstcmd) { isnxos = false; firstcmd = false; } cmdstart = true; } } String command = null; if (cmdstart) { // Done with current command. Another command starts now. // Add this command to the hashmap. If it is already present, // overwrite it. if (matchingPattern != null) { Pattern p = Pattern.compile(matchingPattern); Matcher m = p.matcher(line); if (m.matches()) { try { command = m.group(1).trim().toLowerCase(); command = command.trim(); if (d != null) { Map<String, Object> map = d.getAttributes(); Iterator entries = map.entrySet().iterator(); while (entries.hasNext()) { Entry thisEntry = (Entry) entries.next(); String pattern = thisEntry.getKey().toString(); boolean test = false; m1 = Pattern.compile(pattern).matcher(line); if (m1.matches()) { DevProperties prop = (DevProperties) thisEntry.getValue(); Map<String, String> prop1 = prop.getProperty(); Iterator it = prop1.entrySet().iterator(); while (it.hasNext()) { Entry thisEntry1 = (Entry) it.next(); if (thisEntry1.getKey().toString().equals("command")) { command = prop.getProperty("command"); test = true; } } } if (test) { break; } } } } catch (Exception e) { if (d != null) { Map<String, Object> map = d.getAttributes(); Iterator entries = map.entrySet().iterator(); while (entries.hasNext()) { Entry thisEntry = (Entry) entries.next(); String pattern = thisEntry.getKey().toString(); boolean test = false; m1 = Pattern.compile(pattern).matcher(line); if (m1.matches()) { DevProperties prop = (DevProperties) thisEntry.getValue(); Map<String, String> prop1 = prop.getProperty(); Iterator it = prop1.entrySet().iterator(); while (it.hasNext()) { Entry thisEntry1 = (Entry) it.next(); if (thisEntry1.getKey().toString().equals("command")) { command = prop.getProperty("command"); test = true; } } } if (test) { break; } } } } } if ((command.length() > 0) && !command.equals(" ")) { // IOS XR show tech has the command as "show running-config (no password) if (command.equals("show running-config (no password)") && !cmdOutputs.containsKey("show running-config")) { command = "show running-config"; } addCmdOutput(fileName, cmd, cmdOutput, cmdOutputs); cmd = command; cmdNeeded = commandNeedsToBeSaved(cmd); // for NXOS, the show version appears multiple times. First time for chassis and later for // the // modules. // We should ignore the other show versions. cmdNeeded = (cmdNeeded) && (!cmdOutputs.containsKey(cmd)); cmdOutput = new StringBuffer(); continue; } } } // if (line.contains("Cisco Adaptive Security Appliance Software Version") || // line.contains("Cisco PIX")) // { // command = "show version"; // addCmdOutput(fileName, cmd, cmdOutput, cmdOutputs); // cmd = command; // cmdNeeded = commandNeedsToBeSaved(cmd); // for NXOS, the show version appears multiple times. First time for chassis and later for // the // modules. // We should ignore the other show versions. // cmdNeeded = (cmdNeeded) && (!cmdOutputs.containsKey(cmd)); // cmdOutput = new StringBuffer(); // continue; // } if (cmdNeeded) { cmdOutput.append(trimShowTechLine(line)); } } } finally { if (is != null) { try { is.close(); } catch (IOException e) { logger.error("Error while closing stream", e); } } } if (!ignoreBanner) { if (insideBanner) { // Something is wrong! We never found the end of a banner. Something wrong with // the end-of-banner detection code. Let us try it one more time, this time // let us ignore the banner.. just in case. logger.warn("File: " + fileName + " Unable to find end of banner commands. " + "Running once more and ignoring banner commands now."); processShowTechFile(fileName, true, isGetter, d); return; } else { int percentLinesInsideBanner = (linesInsideBanner * 100) / lineno; if (percentLinesInsideBanner > 85) { // Something wrong. Somehow, looks like 85% of the file is under banner commands! // Let us try it one more time, this time // let us ignore the banner.. just in case. logger.warn("File: " + fileName + " major portion of the file: (" + percentLinesInsideBanner + "%) " + "is found to be inside banner commands. Trying again by ignoring the banners."); processShowTechFile(fileName, true, isGetter, d); return; } } } addCmdOutput(fileName, cmd, cmdOutput, cmdOutputs); addShowTechFile(fileName, cmdOutputs, ipAddress, d); }
From source file:org.apache.hadoop.hive.ql.optimizer.AbstractBucketJoinProc.java
protected boolean checkConvertBucketMapJoin(BucketJoinProcCtx context, Map<String, Operator<? extends OperatorDesc>> aliasToOpInfo, Map<Byte, List<ExprNodeDesc>> keysMap, String baseBigAlias, List<String> joinAliases) throws SemanticException { LinkedHashMap<String, List<Integer>> tblAliasToNumberOfBucketsInEachPartition = new LinkedHashMap<String, List<Integer>>(); LinkedHashMap<String, List<List<String>>> tblAliasToBucketedFilePathsInEachPartition = new LinkedHashMap<String, List<List<String>>>(); HashMap<String, Operator<? extends OperatorDesc>> topOps = pGraphContext.getTopOps(); HashMap<String, String> aliasToNewAliasMap = new HashMap<String, String>(); // (partition to bucket file names) and (partition to bucket number) for // the big table; LinkedHashMap<Partition, List<String>> bigTblPartsToBucketFileNames = new LinkedHashMap<Partition, List<String>>(); LinkedHashMap<Partition, Integer> bigTblPartsToBucketNumber = new LinkedHashMap<Partition, Integer>(); Integer[] joinKeyOrder = null; // accessing order of join cols to bucket cols, should be same boolean bigTablePartitioned = true; for (int index = 0; index < joinAliases.size(); index++) { String alias = joinAliases.get(index); Operator<? extends OperatorDesc> topOp = aliasToOpInfo.get(alias); // The alias may not be present in case of a sub-query if (topOp == null) { return false; }/*from w w w .j a va 2 s . co m*/ List<String> keys = toColumns(keysMap.get((byte) index)); if (keys == null || keys.isEmpty()) { return false; } int oldKeySize = keys.size(); TableScanOperator tso = TableAccessAnalyzer.genRootTableScan(topOp, keys); if (tso == null) { // We cannot get to root TableScan operator, likely because there is a join or group-by // between topOp and root TableScan operator. We don't handle that case, and simply return return false; } // For nested sub-queries, the alias mapping is not maintained in QB currently. if (topOps.containsValue(tso)) { for (Map.Entry<String, Operator<? extends OperatorDesc>> topOpEntry : topOps.entrySet()) { if (topOpEntry.getValue() == tso) { String newAlias = topOpEntry.getKey(); if (!newAlias.equals(alias)) { joinAliases.set(index, newAlias); if (baseBigAlias.equals(alias)) { baseBigAlias = newAlias; } aliasToNewAliasMap.put(alias, newAlias); alias = newAlias; } break; } } } else { // Ideally, this should never happen, and this should be an assert. return false; } // The join keys cannot be transformed in the sub-query currently. // TableAccessAnalyzer.genRootTableScan will only return the base table scan // if the join keys are constants or a column. Even a simple cast of the join keys // will result in a null table scan operator. In case of constant join keys, they would // be removed, and the size before and after the genRootTableScan will be different. if (keys.size() != oldKeySize) { return false; } if (joinKeyOrder == null) { joinKeyOrder = new Integer[keys.size()]; } Table tbl = tso.getConf().getTableMetadata(); if (tbl.isPartitioned()) { PrunedPartitionList prunedParts = pGraphContext.getPrunedPartitions(alias, tso); List<Partition> partitions = prunedParts.getNotDeniedPartns(); // construct a mapping of (Partition->bucket file names) and (Partition -> bucket number) if (partitions.isEmpty()) { if (!alias.equals(baseBigAlias)) { tblAliasToNumberOfBucketsInEachPartition.put(alias, Arrays.<Integer>asList()); tblAliasToBucketedFilePathsInEachPartition.put(alias, new ArrayList<List<String>>()); } } else { List<Integer> buckets = new ArrayList<Integer>(); List<List<String>> files = new ArrayList<List<String>>(); for (Partition p : partitions) { if (!checkBucketColumns(p.getBucketCols(), keys, joinKeyOrder)) { return false; } List<String> fileNames = getBucketFilePathsOfPartition(p.getDataLocation(), pGraphContext); // The number of files for the table should be same as number of buckets. int bucketCount = p.getBucketCount(); if (fileNames.size() != 0 && fileNames.size() != bucketCount) { String msg = "The number of buckets for table " + tbl.getTableName() + " partition " + p.getName() + " is " + p.getBucketCount() + ", whereas the number of files is " + fileNames.size(); throw new SemanticException(ErrorMsg.BUCKETED_TABLE_METADATA_INCORRECT.getMsg(msg)); } if (alias.equals(baseBigAlias)) { bigTblPartsToBucketFileNames.put(p, fileNames); bigTblPartsToBucketNumber.put(p, bucketCount); } else { files.add(fileNames); buckets.add(bucketCount); } } if (!alias.equals(baseBigAlias)) { tblAliasToNumberOfBucketsInEachPartition.put(alias, buckets); tblAliasToBucketedFilePathsInEachPartition.put(alias, files); } } } else { if (!checkBucketColumns(tbl.getBucketCols(), keys, joinKeyOrder)) { return false; } List<String> fileNames = getBucketFilePathsOfPartition(tbl.getDataLocation(), pGraphContext); Integer num = new Integer(tbl.getNumBuckets()); // The number of files for the table should be same as number of buckets. if (fileNames.size() != 0 && fileNames.size() != num) { String msg = "The number of buckets for table " + tbl.getTableName() + " is " + tbl.getNumBuckets() + ", whereas the number of files is " + fileNames.size(); throw new SemanticException(ErrorMsg.BUCKETED_TABLE_METADATA_INCORRECT.getMsg(msg)); } if (alias.equals(baseBigAlias)) { bigTblPartsToBucketFileNames.put(null, fileNames); bigTblPartsToBucketNumber.put(null, tbl.getNumBuckets()); bigTablePartitioned = false; } else { tblAliasToNumberOfBucketsInEachPartition.put(alias, Arrays.asList(num)); tblAliasToBucketedFilePathsInEachPartition.put(alias, Arrays.asList(fileNames)); } } } // All tables or partitions are bucketed, and their bucket number is // stored in 'bucketNumbers', we need to check if the number of buckets in // the big table can be divided by no of buckets in small tables. for (Integer numBucketsInPartitionOfBigTable : bigTblPartsToBucketNumber.values()) { if (!checkNumberOfBucketsAgainstBigTable(tblAliasToNumberOfBucketsInEachPartition, numBucketsInPartitionOfBigTable)) { return false; } } context.setTblAliasToNumberOfBucketsInEachPartition(tblAliasToNumberOfBucketsInEachPartition); context.setTblAliasToBucketedFilePathsInEachPartition(tblAliasToBucketedFilePathsInEachPartition); context.setBigTblPartsToBucketFileNames(bigTblPartsToBucketFileNames); context.setBigTblPartsToBucketNumber(bigTblPartsToBucketNumber); context.setJoinAliases(joinAliases); context.setBaseBigAlias(baseBigAlias); context.setBigTablePartitioned(bigTablePartitioned); if (!aliasToNewAliasMap.isEmpty()) { context.setAliasToNewAliasMap(aliasToNewAliasMap); } return true; }
From source file:org.telegram.ui.PassportActivity.java
private void createChatAttachView() { if (getParentActivity() == null) { return;//from w ww . j a va 2 s. co m } if (chatAttachAlert == null) { chatAttachAlert = new ChatAttachAlert(getParentActivity(), this); chatAttachAlert.setDelegate(new ChatAttachAlert.ChatAttachViewDelegate() { @Override public void didPressedButton(int button) { if (getParentActivity() == null || chatAttachAlert == null) { return; } if (button == 8 || button == 7) { if (button != 8) { chatAttachAlert.dismiss(); } HashMap<Object, Object> selectedPhotos = chatAttachAlert.getSelectedPhotos(); ArrayList<Object> selectedPhotosOrder = chatAttachAlert.getSelectedPhotosOrder(); if (!selectedPhotos.isEmpty()) { ArrayList<SendMessagesHelper.SendingMediaInfo> photos = new ArrayList<>(); for (int a = 0; a < selectedPhotosOrder.size(); a++) { MediaController.PhotoEntry photoEntry = (MediaController.PhotoEntry) selectedPhotos .get(selectedPhotosOrder.get(a)); SendMessagesHelper.SendingMediaInfo info = new SendMessagesHelper.SendingMediaInfo(); if (photoEntry.imagePath != null) { info.path = photoEntry.imagePath; } else if (photoEntry.path != null) { info.path = photoEntry.path; } photos.add(info); photoEntry.reset(); } processSelectedFiles(photos); } return; } else if (chatAttachAlert != null) { chatAttachAlert.dismissWithButtonClick(button); } processSelectedAttach(button); } @Override public View getRevealView() { return null; } @Override public void didSelectBot(TLRPC.User user) { } @Override public void onCameraOpened() { AndroidUtilities.hideKeyboard(fragmentView.findFocus()); } @Override public boolean allowGroupPhotos() { return false; } }); } }
From source file:org.akaza.openclinica.control.submit.AddNewSubjectServlet.java
@Override protected void processRequest() throws Exception { checkStudyLocked(Page.LIST_STUDY_SUBJECTS, respage.getString("current_study_locked")); checkStudyFrozen(Page.LIST_STUDY_SUBJECTS, respage.getString("current_study_frozen")); StudySubjectDAO ssd = new StudySubjectDAO(sm.getDataSource()); StudyDAO stdao = new StudyDAO(sm.getDataSource()); StudyGroupClassDAO sgcdao = new StudyGroupClassDAO(sm.getDataSource()); ArrayList classes = new ArrayList(); panel.setStudyInfoShown(false);// w w w . j ava 2 s . c o m FormProcessor fp = new FormProcessor(request); FormDiscrepancyNotes discNotes; SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); // TODO l10n for dates? Note that in some places we hard-code the YOB by // using "01/01/"+yob, // not exactly supporting i18n...tbh // YW << update study parameters of current study. // "collectDob" and "genderRequired" are set as the same as the parent // study int parentStudyId = currentStudy.getParentStudyId(); if (parentStudyId <= 0) { parentStudyId = currentStudy.getId(); classes = sgcdao.findAllActiveByStudy(currentStudy); } else { StudyBean parentStudy = (StudyBean) stdao.findByPK(parentStudyId); classes = sgcdao.findAllActiveByStudy(parentStudy); } StudyParameterValueDAO spvdao = new StudyParameterValueDAO(sm.getDataSource()); StudyParameterValueBean parentSPV = spvdao.findByHandleAndStudy(parentStudyId, "collectDob"); currentStudy.getStudyParameterConfig().setCollectDob(parentSPV.getValue()); parentSPV = spvdao.findByHandleAndStudy(parentStudyId, "genderRequired"); currentStudy.getStudyParameterConfig().setGenderRequired(parentSPV.getValue()); // YW >> // tbh StudyParameterValueBean checkPersonId = spvdao.findByHandleAndStudy(parentStudyId, "subjectPersonIdRequired"); currentStudy.getStudyParameterConfig().setSubjectPersonIdRequired(checkPersonId.getValue()); // end fix for 1750, tbh 10 2007 if (!fp.isSubmitted()) { if (fp.getBoolean("instr")) { session.removeAttribute(FORM_DISCREPANCY_NOTES_NAME); forwardPage(Page.INSTRUCTIONS_ENROLL_SUBJECT); } else { setUpBeans(classes); Date today = new Date(System.currentTimeMillis()); String todayFormatted = local_df.format(today); fp.addPresetValue(INPUT_ENROLLMENT_DATE, todayFormatted); // YW 10-07-2007 << String idSetting = ""; if (currentStudy.getParentStudyId() > 0) { parentSPV = spvdao.findByHandleAndStudy(parentStudyId, "subjectIdGeneration"); currentStudy.getStudyParameterConfig().setSubjectIdGeneration(parentSPV.getValue()); } idSetting = currentStudy.getStudyParameterConfig().getSubjectIdGeneration(); // YW >> logger.info("subject id setting :" + idSetting); // set up auto study subject id // Shaoyu Su: if idSetting is auto, do not calculate the next // available ID (label) for now if (idSetting.equals("auto editable") || idSetting.equals("auto non-editable")) { //Shaoyu Su // int nextLabel = ssd.findTheGreatestLabel() + 1; // fp.addPresetValue(INPUT_LABEL, new Integer(nextLabel).toString()); fp.addPresetValue(INPUT_LABEL, resword.getString("id_generated_Save_Add")); } setPresetValues(fp.getPresetValues()); discNotes = new FormDiscrepancyNotes(); session.setAttribute(FORM_DISCREPANCY_NOTES_NAME, discNotes); forwardPage(Page.ADD_NEW_SUBJECT); } } else {// submitted // YW << record parameters' values on input page so those values // could be used to compare against // values in database <subject> table for "add existing subject" if (!fp.getBoolean(EXISTING_SUB_SHOWN)) { DOB = fp.getString(INPUT_DOB); YOB = fp.getString(INPUT_YOB); GENDER = fp.getString(INPUT_GENDER); } // YW >> discNotes = (FormDiscrepancyNotes) session.getAttribute(FORM_DISCREPANCY_NOTES_NAME); if (discNotes == null) { discNotes = new FormDiscrepancyNotes(); } DiscrepancyValidator v = new DiscrepancyValidator(request, discNotes); v.addValidation(INPUT_LABEL, Validator.NO_BLANKS); String subIdSetting = currentStudy.getStudyParameterConfig().getSubjectIdGeneration(); if (!subIdSetting.equalsIgnoreCase("auto non-editable") && !subIdSetting.equalsIgnoreCase("auto editable")) { v.addValidation(INPUT_LABEL, Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 30); } if (currentStudy.getStudyParameterConfig().getSubjectPersonIdRequired().equals("required")) { v.addValidation(INPUT_UNIQUE_IDENTIFIER, Validator.NO_BLANKS); } v.addValidation(INPUT_UNIQUE_IDENTIFIER, Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255); if (!StringUtils.isBlank(fp.getString(INPUT_SECONDARY_LABEL))) { v.addValidation(INPUT_SECONDARY_LABEL, Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 30); } String dobSetting = currentStudy.getStudyParameterConfig().getCollectDob(); if (dobSetting.equals("1")) {// date of birth v.addValidation(INPUT_DOB, Validator.IS_A_DATE); if (!StringUtils.isBlank(fp.getString("INPUT_DOB"))) { v.alwaysExecuteLastValidation(INPUT_DOB); } v.addValidation(INPUT_DOB, Validator.DATE_IN_PAST); } else if (dobSetting.equals("2")) {// year of birth v.addValidation(INPUT_YOB, Validator.IS_AN_INTEGER); v.alwaysExecuteLastValidation(INPUT_YOB); v.addValidation(INPUT_YOB, Validator.COMPARES_TO_STATIC_VALUE, NumericComparisonOperator.GREATER_THAN_OR_EQUAL_TO, 1000); // get today's year Date today = new Date(); Calendar c = Calendar.getInstance(); c.setTime(today); int currentYear = c.get(Calendar.YEAR); v.addValidation(INPUT_YOB, Validator.COMPARES_TO_STATIC_VALUE, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, currentYear); } else { // DOB not used, added tbh 102007 logger.info("should read this only if DOB not used"); } ArrayList acceptableGenders = new ArrayList(); acceptableGenders.add("m"); acceptableGenders.add("f"); if (!currentStudy.getStudyParameterConfig().getGenderRequired().equals("false")) { v.addValidation(INPUT_GENDER, Validator.IS_IN_SET, acceptableGenders); } v.addValidation(INPUT_ENROLLMENT_DATE, Validator.IS_A_DATE); v.alwaysExecuteLastValidation(INPUT_ENROLLMENT_DATE); v.addValidation(INPUT_ENROLLMENT_DATE, Validator.DATE_IN_PAST); boolean locationError = false; if (fp.getBoolean("addWithEvent")) { v.addValidation(INPUT_EVENT_START_DATE, Validator.IS_A_DATE); v.alwaysExecuteLastValidation(INPUT_EVENT_START_DATE); if (currentStudy.getStudyParameterConfig().getEventLocationRequired() .equalsIgnoreCase("required")) { v.addValidation("location", Validator.NO_BLANKS); locationError = true; } } HashMap errors = v.validate(); SubjectDAO sdao = new SubjectDAO(sm.getDataSource()); String uniqueIdentifier = fp.getString(INPUT_UNIQUE_IDENTIFIER);// global // Id SubjectBean subjectWithSameId = new SubjectBean(); SubjectBean subjectWithSameIdInParent = new SubjectBean(); boolean showExistingRecord = false; if (!uniqueIdentifier.equals("")) { boolean subjectWithSameIdInCurrentStudyTree = false; // checks whether there is a subject with same id inside current // study/site subjectWithSameId = sdao.findByUniqueIdentifierAndStudy(uniqueIdentifier, currentStudy.getId()); // tbh // if (currentStudy.getParentStudyId() > 0) { // subjectWithSameIdInParent = // sdao.findByUniqueIdentifierAndStudy( // uniqueIdentifier, // currentStudy.getParentStudyId()); // logger.info("check // parent..."+currentStudy.getParentStudyId()); // } // tbh if (subjectWithSameId.isActive()) { // || // subjectWithSameIdInParent.isActive()) // { Validator.addError(errors, INPUT_UNIQUE_IDENTIFIER, resexception.getString("subject_with_person_ID") + " " + uniqueIdentifier + " " + resexception.getString("is_already_enrolled_in_this_study")); subjectWithSameIdInCurrentStudyTree = true; logger.info("just added unique id in study tree"); } else { // checks whether there is a subject with same id inside // sites of // current study subjectWithSameId = sdao.findByUniqueIdentifierAndParentStudy(uniqueIdentifier, currentStudy.getId()); if (subjectWithSameId.isActive()) { StudySubjectBean ssub = ssd.findBySubjectIdAndStudy(subjectWithSameId.getId(), currentStudy); StudyBean site = (StudyBean) stdao.findByPK(ssub.getStudyId()); Validator.addError(errors, INPUT_UNIQUE_IDENTIFIER, resexception.getString("this_subject_person_ID") + " " + uniqueIdentifier + resexception.getString("has_already_enrolled_site") + site.getName() + resexception.getString("of_current_study_need_to_move") + resexception.getString("please_have_user_manage_privileges")); subjectWithSameIdInCurrentStudyTree = true; } else { // check whether there is a subject with same id in the // parent study subjectWithSameId = sdao.findByUniqueIdentifierAndStudy(uniqueIdentifier, currentStudy.getParentStudyId()); if (subjectWithSameId.isActive()) { Validator.addError(errors, INPUT_UNIQUE_IDENTIFIER, resexception.getString("this_subject_with_person_ID") + " " + uniqueIdentifier + resexception.getString("has_already_enrolled_parent_study")); subjectWithSameIdInCurrentStudyTree = true; } else { // YW 11-26-2007 << check whether there is a subject // with the same id in other sites of the same study subjectWithSameId = sdao.findByUniqueIdentifierAndParentStudy(uniqueIdentifier, currentStudy.getParentStudyId()); if (subjectWithSameId.isActive()) { Validator.addError(errors, INPUT_UNIQUE_IDENTIFIER, resexception.getString("this_subject_with_person_ID") + " " + uniqueIdentifier + resexception.getString("has_already_enrolled_site_study")); subjectWithSameIdInCurrentStudyTree = true; } // YW >> } } } if (!subjectWithSameIdInCurrentStudyTree) { subjectWithSameId = sdao.findByUniqueIdentifier(uniqueIdentifier); // found subject with same id in other study if (subjectWithSameId.isActive()) { showExistingRecord = true; } } } // end of the block if(!uniqueIdentifier.equals("")) String label = fp.getString(INPUT_LABEL); // Shaoyu Su: if the form submitted for field "INPUT_LABEL" has // value of "AUTO_LABEL", // then Study Subject ID should be created when db row is inserted. if (!label.equalsIgnoreCase(resword.getString("id_generated_Save_Add"))) { StudySubjectBean subjectWithSameLabel = ssd.findByLabelAndStudy(label, currentStudy); StudySubjectBean subjectWithSameLabelInParent = new StudySubjectBean(); // tbh if (currentStudy.getParentStudyId() > 0) { subjectWithSameLabelInParent = ssd.findSameByLabelAndStudy(label, currentStudy.getParentStudyId(), 0);// < // -- // blank // id // since // the // ss // hasn't // been // created // yet, // tbh } // tbh if (subjectWithSameLabel.isActive() || subjectWithSameLabelInParent.isActive()) { Validator.addError(errors, INPUT_LABEL, resexception.getString("another_assigned_this_ID_choose_unique")); } } if (!classes.isEmpty()) { for (int i = 0; i < classes.size(); i++) { StudyGroupClassBean sgc = (StudyGroupClassBean) classes.get(i); int groupId = fp.getInt("studyGroupId" + i); String notes = fp.getString("notes" + i); if ("Required".equals(sgc.getSubjectAssignment()) && groupId == 0) { Validator.addError(errors, "studyGroupId" + i, resexception.getString("group_class_is_required")); } if (notes.trim().length() > 255) { Validator.addError(errors, "notes" + i, resexception.getString("notes_cannot_longer_255")); } sgc.setStudyGroupId(groupId); sgc.setGroupNotes(notes); } } if (!errors.isEmpty()) { addPageMessage(respage.getString("there_were_some_errors_submission")); if (locationError) { addPageMessage(respage.getString("location_blank_error")); } setInputMessages(errors); fp.addPresetValue(INPUT_DOB, fp.getString(INPUT_DOB)); fp.addPresetValue(INPUT_YOB, fp.getString(INPUT_YOB)); fp.addPresetValue(INPUT_GENDER, fp.getString(INPUT_GENDER)); fp.addPresetValue(INPUT_UNIQUE_IDENTIFIER, uniqueIdentifier); fp.addPresetValue(INPUT_LABEL, label); fp.addPresetValue(INPUT_SECONDARY_LABEL, fp.getString(INPUT_SECONDARY_LABEL)); fp.addPresetValue(INPUT_ENROLLMENT_DATE, fp.getString(INPUT_ENROLLMENT_DATE)); fp.addPresetValue(INPUT_EVENT_START_DATE, fp.getString(INPUT_EVENT_START_DATE)); fp.addPresetValue(STUDY_EVENT_DEFINITION, fp.getInt(STUDY_EVENT_DEFINITION)); fp.addPresetValue(LOCATION, fp.getString(LOCATION)); fp.addPresetValue(EDIT_DOB, fp.getString(EDIT_DOB)); setPresetValues(fp.getPresetValues()); setUpBeans(classes); boolean existingSubShown = fp.getBoolean(EXISTING_SUB_SHOWN); if (!existingSubShown) { Object isSubjectOverlay = fp.getRequest().getParameter("subjectOverlay"); if (isSubjectOverlay != null) { int eventId = fp.getInt("studyEventDefinition"); if (eventId < 1) { Validator.addError(errors, STUDY_EVENT_DEFINITION, resexception.getString("input_not_acceptable_option")); } String location = fp.getString(LOCATION); if (location == null && location.length() == 0) { Validator.addError(errors, LOCATION, resexception.getString("field_not_blank")); } request.setAttribute("showOverlay", true); forwardPage(Page.LIST_STUDY_SUBJECTS_SERVLET); } else { forwardPage(Page.ADD_NEW_SUBJECT); } } else { forwardPage(Page.ADD_EXISTING_SUBJECT); } } else { // no errors StudySubjectBean studySubject = new StudySubjectBean(); SubjectBean subject = new SubjectBean(); boolean existingSubShown = fp.getBoolean(EXISTING_SUB_SHOWN); if (showExistingRecord && !existingSubShown) { needUpdate = false; subject = subjectWithSameId; Calendar cal = Calendar.getInstance(); int year = 0; if (subject.getDateOfBirth() != null) { cal.setTime(subject.getDateOfBirth()); year = cal.get(Calendar.YEAR); fp.addPresetValue(INPUT_DOB, local_df.format(subject.getDateOfBirth())); } else { fp.addPresetValue(INPUT_DOB, ""); } if (currentStudy.getStudyParameterConfig().getCollectDob().equals("1") && !subject.isDobCollected()) { // fp.addPresetValue(EDIT_DOB, "yes"); fp.addPresetValue(INPUT_DOB, fp.getString(INPUT_DOB)); } // YW << it has been taken off to solve bug0001125 /* * else { fp.addPresetValue(INPUT_DOB, ""); } */ // YW >> fp.addPresetValue(INPUT_YOB, String.valueOf(year)); if (!currentStudy.getStudyParameterConfig().getGenderRequired().equals("false")) { fp.addPresetValue(INPUT_GENDER, subject.getGender() + ""); } else { fp.addPresetValue(INPUT_GENDER, ""); } // YW << // Shaoyu Su: delay setting INPUT_LABEL field if (!label.equalsIgnoreCase(resword.getString("id_generated_Save_Add"))) { fp.addPresetValue(INPUT_LABEL, label); } fp.addPresetValue(INPUT_SECONDARY_LABEL, fp.getString(INPUT_SECONDARY_LABEL)); fp.addPresetValue(INPUT_ENROLLMENT_DATE, fp.getString(INPUT_ENROLLMENT_DATE)); fp.addPresetValue(INPUT_EVENT_START_DATE, fp.getString(INPUT_EVENT_START_DATE)); // YW >> fp.addPresetValue(INPUT_UNIQUE_IDENTIFIER, subject.getUniqueIdentifier()); setPresetValues(fp.getPresetValues()); setUpBeans(classes); // YW << int warningCount = 0; if (currentStudy.getStudyParameterConfig().getGenderRequired().equalsIgnoreCase("true")) { if (String.valueOf(subjectWithSameId.getGender()).equals(" ")) { fp.addPresetValue(G_WARNING, "emptytrue"); fp.addPresetValue(INPUT_GENDER, GENDER); needUpdate = true; updateSubject = subjectWithSameId; updateSubject.setGender(GENDER.toCharArray()[0]); warningCount++; } else if (!String.valueOf(subjectWithSameId.getGender()).equals(GENDER)) { fp.addPresetValue(G_WARNING, "true"); warningCount++; } else { fp.addPresetValue(G_WARNING, "false"); } } else { fp.addPresetValue(G_WARNING, "false"); } // Current study required DOB if (currentStudy.getStudyParameterConfig().getCollectDob().equals("1")) { // date-of-birth in subject table is not completed if (subjectWithSameId.isDobCollected() == false) { needUpdate = true; updateSubject = subjectWithSameId; updateSubject.setDobCollected(true); if (subjectWithSameId.getDateOfBirth() == null) { fp.addPresetValue(INPUT_DOB, DOB); updateSubject.setDateOfBirth(new Date(DOB)); } else { String y = String.valueOf(subjectWithSameId.getDateOfBirth()).split("\\-")[0]; String[] d = DOB.split("\\/"); // if year-of-birth in subject table if (!y.equals("0001")) { // if year-of-birth is different from DOB's // year, use year-of-birth if (!y.equals(d[2])) { fp.addPresetValue(D_WARNING, "dobYearWrong"); fp.addPresetValue(INPUT_DOB, d[0] + "/" + d[1] + "/" + y); updateSubject.setDateOfBirth(sdf.parse(d[0] + "/" + d[1] + "/" + y)); } else { fp.addPresetValue(D_WARNING, "dobUsed"); fp.addPresetValue(INPUT_DOB, DOB); updateSubject.setDateOfBirth(sdf.parse(DOB)); } } // date-of-birth is not required in subject // table else { fp.addPresetValue(D_WARNING, "emptyD"); fp.addPresetValue(INPUT_DOB, DOB); updateSubject.setDateOfBirth(sdf.parse(DOB)); } } warningCount++; } // date-of-birth in subject table but doesn't match DOB else if (!local_df.format(subjectWithSameId.getDateOfBirth()).toString().equals(DOB)) { // System.out.println("comparing " + // local_df.format( // subjectWithSameId.getDateOfBirth()).toString()); fp.addPresetValue(D_WARNING, "currentDOBWrong"); warningCount++; } // date-of-birth in subject table matchs DOB else { fp.addPresetValue(D_WARNING, "false"); } } // current Study require YOB else if (currentStudy.getStudyParameterConfig().getCollectDob().equals("2")) { String y = String.valueOf(subjectWithSameId.getDateOfBirth()).split("\\-")[0]; // year of date-of-birth in subject table is avaible if (!y.equals("0001")) { // year in subject table doesn't match YOB, if (!y.equals(YOB)) { fp.addPresetValue(Y_WARNING, "yobWrong"); warningCount++; } // year in subject table matches YOB else { fp.addPresetValue(Y_WARNING, "false"); } } // year of date-of-birth in the subject talbe is not // availbe, YOB is used else { needUpdate = true; updateSubject = subjectWithSameId; fp.addPresetValue(Y_WARNING, "yearEmpty"); fp.addPresetValue(INPUT_YOB, YOB); updateSubject.setDateOfBirth(sdf.parse("01/01/" + YOB)); warningCount++; } } // current study require no DOB, there is no need to check // date-of-birth in the subject table else { fp.addPresetValue(Y_WARNING, "false"); } if (warningCount > 0) { warningCount = 0; forwardPage(Page.ADD_EXISTING_SUBJECT); return; } // forwardPage(Page.ADD_EXISTING_SUBJECT); // return; // YW >> } // YW << If showExistingRecord, which means there is a record // for the subject // in <subject> table, the subject only needs to be inserted // into <studysubject> table. // In other words, if(!showExistingRecord), the subject needs to // to be inserted into both <subject> and <studysubject> tables if (!showExistingRecord) { // YW >> if (!StringUtil.isBlank(fp.getString(INPUT_GENDER))) { subject.setGender(fp.getString(INPUT_GENDER).charAt(0)); } else { subject.setGender(' '); } subject.setUniqueIdentifier(uniqueIdentifier); if (currentStudy.getStudyParameterConfig().getCollectDob().equals("1")) { if (!StringUtil.isBlank(fp.getString(INPUT_DOB))) { subject.setDateOfBirth(fp.getDate(INPUT_DOB)); subject.setDobCollected(true); } else { subject.setDateOfBirth(null); subject.setDobCollected(false); } } else if (currentStudy.getStudyParameterConfig().getCollectDob().equals("2")) { // generate a fake birthday in 01/01/YYYY format, only // the year is // valid // added the "2" to make sure that 'not used' is kept to // null, tbh 102007 subject.setDobCollected(false); int yob = fp.getInt(INPUT_YOB); Date fakeDate = new Date("01/01/" + yob); // Calendar fakeCal = Calendar.getInstance(); // fakeCal.set(Calendar.YEAR, yob); // fakeCal.set(Calendar.MONTH, 1); // fakeCal.set(Calendar.DAY_OF_MONTH, 1); // String dobString = "01/01/" + yob; String dobString = local_df.format(fakeDate); try { Date fakeDOB = local_df.parse(dobString); subject.setDateOfBirth(fakeDOB); } catch (ParseException pe) { subject.setDateOfBirth(new Date()); addPageMessage(respage.getString("problem_happened_saving_year")); } } subject.setStatus(Status.AVAILABLE); subject.setOwner(ub); subject = sdao.create(subject); if (!subject.isActive()) { throw new OpenClinicaException(resexception.getString("could_not_create_subject"), "3"); } // YW << for showExistingRecord && existingSubShown, // If input value(s) is(are) different from database, // warning will be shown. // If value(s) in database is(are) empty, entered value(s) // could be used; // Otherwise, value(s) in database will be used. // For date-of-birth, if database only has year-of-birth, // the year in database will be used for year part } else if (existingSubShown) { if (!needUpdate) { subject = subjectWithSameId; } else { updateSubject.setUpdater(ub); updateSubject = (SubjectBean) sdao.update(updateSubject); if (!updateSubject.isActive()) { throw new OpenClinicaException("Could not create subject.", "5"); } subject = updateSubject; needUpdate = false; } } // YW >> // enroll the subject in the active study studySubject.setSubjectId(subject.getId()); studySubject.setStudyId(currentStudy.getId()); studySubject.setLabel(fp.getString(INPUT_LABEL)); studySubject.setSecondaryLabel(fp.getString(INPUT_SECONDARY_LABEL)); studySubject.setStatus(Status.AVAILABLE); studySubject.setEnrollmentDate(fp.getDate(INPUT_ENROLLMENT_DATE)); if (fp.getBoolean("addWithEvent")) { studySubject.setEventStartDate(fp.getDate(INPUT_EVENT_START_DATE)); } studySubject.setOwner(ub); // Shaoyu Su: prevent same label ("Study Subject ID") if (fp.getString(INPUT_LABEL).equalsIgnoreCase(resword.getString("id_generated_Save_Add"))) { synchronized (simpleLockObj) { int nextLabel = ssd.findTheGreatestLabel() + 1; studySubject.setLabel(nextLabel + ""); studySubject = ssd.createWithoutGroup(studySubject); if (showExistingRecord && !existingSubShown) { fp.addPresetValue(INPUT_LABEL, label); } } } else { studySubject = ssd.createWithoutGroup(studySubject); } if (!classes.isEmpty() && studySubject.isActive()) { SubjectGroupMapDAO sgmdao = new SubjectGroupMapDAO(sm.getDataSource()); for (int i = 0; i < classes.size(); i++) { StudyGroupClassBean group = (StudyGroupClassBean) classes.get(i); int studyGroupId = group.getStudyGroupId(); String notes = group.getGroupNotes(); SubjectGroupMapBean map = new SubjectGroupMapBean(); map.setNotes(group.getGroupNotes()); map.setStatus(Status.AVAILABLE); map.setStudyGroupId(group.getStudyGroupId()); map.setStudySubjectId(studySubject.getId()); map.setStudyGroupClassId(group.getId()); map.setOwner(ub); if (map.getStudyGroupId() > 0) { sgmdao.create(map); } } } if (!studySubject.isActive()) { throw new OpenClinicaException(resexception.getString("could_not_create_study_subject"), "4"); } // save discrepancy notes into DB FormDiscrepancyNotes fdn = (FormDiscrepancyNotes) session.getAttribute(FORM_DISCREPANCY_NOTES_NAME); DiscrepancyNoteDAO dndao = new DiscrepancyNoteDAO(sm.getDataSource()); String[] subjectFields = { INPUT_DOB, INPUT_YOB, INPUT_GENDER }; for (String element : subjectFields) { saveFieldNotes(element, fdn, dndao, subject.getId(), "subject", currentStudy); } saveFieldNotes(INPUT_ENROLLMENT_DATE, fdn, dndao, studySubject.getId(), "studySub", currentStudy); request.removeAttribute(FormProcessor.FIELD_SUBMITTED); request.setAttribute(CreateNewStudyEventServlet.INPUT_STUDY_SUBJECT, studySubject); request.setAttribute(CreateNewStudyEventServlet.INPUT_REQUEST_STUDY_SUBJECT, "no"); request.setAttribute(FormProcessor.FIELD_SUBMITTED, "0"); addPageMessage(respage.getString("subject_with_unique_identifier") + studySubject.getLabel() + respage.getString("X_was_created_succesfully")); if (fp.getBoolean("addWithEvent")) { createStudyEvent(fp, studySubject); // YW << request.setAttribute("id", studySubject.getId() + ""); // String url= response.encodeRedirectURL("ViewStudySubject?id=" + studySubject.getId()); // response.sendRedirect(url); forwardPage(Page.VIEW_STUDY_SUBJECT_SERVLET); // YW >> // we want to get the url of viewing study subject in // browser to avoid page expired problem // response.sendRedirect(response.encodeRedirectURL( // "ViewStudySubject?id=" // + studySubject.getId())); return; } String submitEvent = fp.getString(SUBMIT_EVENT_BUTTON); String submitEnroll = fp.getString(SUBMIT_ENROLL_BUTTON); String submitDone = fp.getString(SUBMIT_DONE_BUTTON); session.removeAttribute(FORM_DISCREPANCY_NOTES_NAME); if (!StringUtil.isBlank(submitEvent)) { forwardPage(Page.CREATE_NEW_STUDY_EVENT_SERVLET); } else if (!StringUtil.isBlank(submitEnroll)) { // NEW MANTIS ISSUE 4770 setUpBeans(classes); Date today = new Date(System.currentTimeMillis()); String todayFormatted = local_df.format(today); fp.addPresetValue(INPUT_ENROLLMENT_DATE, todayFormatted); // YW 10-07-2007 << String idSetting = ""; if (currentStudy.getParentStudyId() > 0) { parentSPV = spvdao.findByHandleAndStudy(parentStudyId, "subjectIdGeneration"); currentStudy.getStudyParameterConfig().setSubjectIdGeneration(parentSPV.getValue()); } idSetting = currentStudy.getStudyParameterConfig().getSubjectIdGeneration(); // YW >> logger.info("subject id setting :" + idSetting); // set up auto study subject id if (idSetting.equals("auto editable") || idSetting.equals("auto non-editable")) { //Shaoyu Su //int nextLabel = ssd.findTheGreatestLabel() + 1; //fp.addPresetValue(INPUT_LABEL, new Integer(nextLabel).toString()); fp.addPresetValue(INPUT_LABEL, resword.getString("id_generated_Save_Add")); } setPresetValues(fp.getPresetValues()); discNotes = new FormDiscrepancyNotes(); session.setAttribute(FORM_DISCREPANCY_NOTES_NAME, discNotes); // End of 4770 forwardPage(Page.ADD_NEW_SUBJECT); } else { // forwardPage(Page.VIEW_STUDY_SUBJECT_SERVLET); // forwardPage(Page.SUBMIT_DATA_SERVLET); request.setAttribute("id", studySubject.getId() + ""); // String url=response.encodeRedirectURL("ViewStudySubject?id=" + studySubject.getId()); // response.sendRedirect(url); forwardPage(Page.VIEW_STUDY_SUBJECT_SERVLET); return; } } // end of no error (errors.isEmpty()) } // end of fp.isSubmitted() }
From source file:davmail.imap.ImapConnection.java
protected void updateFlags(ExchangeSession.Message message, String action, String flags) throws IOException { HashMap<String, String> properties = new HashMap<String, String>(); if ("-Flags".equalsIgnoreCase(action) || "-FLAGS.SILENT".equalsIgnoreCase(action)) { StringTokenizer flagtokenizer = new StringTokenizer(flags); while (flagtokenizer.hasMoreTokens()) { String flag = flagtokenizer.nextToken(); if ("\\Seen".equalsIgnoreCase(flag)) { if (message.read) { properties.put("read", "0"); message.read = false; }//from w w w .j av a 2 s. c o m } else if ("\\Flagged".equalsIgnoreCase(flag)) { if (message.flagged) { properties.put("flagged", "0"); message.flagged = false; } } else if ("\\Deleted".equalsIgnoreCase(flag)) { if (message.deleted) { properties.put("deleted", null); message.deleted = false; } } else if ("Junk".equalsIgnoreCase(flag)) { if (message.junk) { properties.put("junk", "0"); message.junk = false; } } else if ("$Forwarded".equalsIgnoreCase(flag)) { if (message.forwarded) { properties.put("forwarded", null); message.forwarded = false; } } else if ("\\Answered".equalsIgnoreCase(flag)) { if (message.answered) { properties.put("answered", null); message.answered = false; } } else if (message.keywords != null) { properties.put("keywords", message.removeFlag(flag)); } } } else if ("+Flags".equalsIgnoreCase(action) || "+FLAGS.SILENT".equalsIgnoreCase(action)) { StringTokenizer flagtokenizer = new StringTokenizer(flags); while (flagtokenizer.hasMoreTokens()) { String flag = flagtokenizer.nextToken(); if ("\\Seen".equalsIgnoreCase(flag)) { if (!message.read) { properties.put("read", "1"); message.read = true; } } else if ("\\Deleted".equalsIgnoreCase(flag)) { if (!message.deleted) { message.deleted = true; properties.put("deleted", "1"); } } else if ("\\Flagged".equalsIgnoreCase(flag)) { if (!message.flagged) { properties.put("flagged", "2"); message.flagged = true; } } else if ("\\Answered".equalsIgnoreCase(flag)) { if (!message.answered) { properties.put("answered", "102"); message.answered = true; } } else if ("$Forwarded".equalsIgnoreCase(flag)) { if (!message.forwarded) { properties.put("forwarded", "104"); message.forwarded = true; } } else if ("Junk".equalsIgnoreCase(flag)) { if (!message.junk) { properties.put("junk", "1"); message.junk = true; } } else { properties.put("keywords", message.addFlag(flag)); } } } else if ("FLAGS".equalsIgnoreCase(action) || "FLAGS.SILENT".equalsIgnoreCase(action)) { // flag list with default values boolean read = false; boolean deleted = false; boolean junk = false; boolean flagged = false; boolean answered = false; boolean forwarded = false; HashSet<String> keywords = null; // set flags from new flag list StringTokenizer flagtokenizer = new StringTokenizer(flags); while (flagtokenizer.hasMoreTokens()) { String flag = flagtokenizer.nextToken(); if ("\\Seen".equalsIgnoreCase(flag)) { read = true; } else if ("\\Deleted".equalsIgnoreCase(flag)) { deleted = true; } else if ("\\Flagged".equalsIgnoreCase(flag)) { flagged = true; } else if ("\\Answered".equalsIgnoreCase(flag)) { answered = true; } else if ("$Forwarded".equalsIgnoreCase(flag)) { forwarded = true; } else if ("Junk".equalsIgnoreCase(flag)) { junk = true; } else { if (keywords == null) { keywords = new HashSet<String>(); } keywords.add(flag); } } if (keywords != null) { properties.put("keywords", message.setFlags(keywords)); } if (read != message.read) { message.read = read; if (message.read) { properties.put("read", "1"); } else { properties.put("read", "0"); } } if (deleted != message.deleted) { message.deleted = deleted; if (message.deleted) { properties.put("deleted", "1"); } else { properties.put("deleted", null); } } if (flagged != message.flagged) { message.flagged = flagged; if (message.flagged) { properties.put("flagged", "2"); } else { properties.put("flagged", "0"); } } if (answered != message.answered) { message.answered = answered; if (message.answered) { properties.put("answered", "102"); } else if (!forwarded) { // remove property only if not forwarded properties.put("answered", null); } } if (forwarded != message.forwarded) { message.forwarded = forwarded; if (message.forwarded) { properties.put("forwarded", "104"); } else if (!answered) { // remove property only if not answered properties.put("forwarded", null); } } if (junk != message.junk) { message.junk = junk; if (message.junk) { properties.put("junk", "1"); } else { properties.put("junk", "0"); } } } if (!properties.isEmpty()) { session.updateMessage(message, properties); // message is no longer recent message.recent = false; } }