boolean go(double ntime, Box box) { debug("go"); g(ntime); for (int i = 0; i < bs.size() - 1; i++) if (bs.get(i) == box) { Box nb = box.h1 <= box.h2 ? bs.get(i - 1) : bs.get(i + 1); if (eq(nb.h, box.h)) { Box nbox = box.combine(nb); bs.remove(box); bs.add(i, nbox); bs.remove(nb); } else { nb.f += box.f; box.f = 0; } return true; } return false; }
boolean solve2() { int t = nextInt(); if (t == 0) return false; int n = nextInt(); Tower[] towers = new Tower[t]; for (int i = 0; i < t; i++) { towers[i] = new Tower(new Point(nextInt(), nextInt()), nextInt()); } n++; Point[] p = new Point[n]; for (int i = 0; i < n; i++) { p[i] = new Point(nextInt(), nextInt()); } // System.err.println(Arrays.toString(p)); ArrayList<Point> points = new ArrayList<Point>(); double r = 1; for (int i = 0; i < n - 1; i++) { double dist = p[i].dist(p[i + 1]) - (1 - r); int e = (int) Math.floor(dist + 1 - EPS); Point v = p[i + 1].subtract(p[i]).norm(); for (int j = 0; j < e; j++) { points.add(p[i].add(v.multiply(j).add(v.multiply(1 - r)))); } r = p[i + 1].dist(points.get(points.size() - 1)); } if (p[n - 1].dist(points.get(points.size() - 1)) > 0.5 - EPS) { points.add(p[n - 1]); } // System.err.println(points); char last = 0; ArrayList<String> ans = new ArrayList<String>(); for (int i = 0; i < points.size(); i++) { double maxP = Integer.MIN_VALUE; char here = 0; for (int j = 0; j < t; j++) { double w = towers[j].get(points.get(i)); if (maxP < w - EPS) { maxP = w; here = (char) (j + 'A'); } } if (here != last) { ans.add("(" + i + "," + here + ")"); } last = here; } for (int i = 0; i < ans.size(); i++) { if (i != 0) out.print(" "); out.print(ans.get(i)); } out.println(); return true; }
/** Business logic to execute. */ public VOListResponse updateWindowCustomizations( ArrayList oldRows, ArrayList newRows, String serverLanguageId, String username) throws Throwable { Statement stmt = null; Connection conn = null; try { if (this.conn == null) conn = getConn(); else conn = this.conn; WindowCustomizationVO oldVO = null; WindowCustomizationVO newVO = null; for (int i = 0; i < oldRows.size(); i++) { oldVO = (WindowCustomizationVO) oldRows.get(i); newVO = (WindowCustomizationVO) newRows.get(i); TranslationUtils.updateTranslation( oldVO.getDescriptionSYS10(), newVO.getDescriptionSYS10(), newVO.getProgressiveSys10SYS12(), serverLanguageId, conn); } return new VOListResponse(newRows, false, newRows.size()); } catch (Throwable ex) { Logger.error( username, this.getClass().getName(), "executeCommand", "Error while updating customized columns", ex); try { if (this.conn == null && conn != null) // rollback only local connection conn.rollback(); } catch (Exception ex3) { } throw new Exception(ex.getMessage()); } finally { try { if (this.conn == null && conn != null) { // close only local connection conn.commit(); conn.close(); } } catch (Exception exx) { } } }
/** * Get Restriction Lines * * @param reload reload data * @return array of lines */ public MGoalRestriction[] getRestrictions(boolean reload) { if (m_restrictions != null && !reload) return m_restrictions; ArrayList<MGoalRestriction> list = new ArrayList<MGoalRestriction>(); // String sql = "SELECT * FROM PA_GoalRestriction " + "WHERE PA_Goal_ID=? AND IsActive='Y' " + "ORDER BY Org_ID, C_BPartner_ID, M_Product_ID"; PreparedStatement pstmt = null; ResultSet rs = null; try { pstmt = DB.prepareStatement(sql, get_Trx()); pstmt.setInt(1, getPA_Goal_ID()); rs = pstmt.executeQuery(); while (rs.next()) list.add(new MGoalRestriction(getCtx(), rs, get_Trx())); } catch (Exception e) { log.log(Level.SEVERE, sql, e); } finally { DB.closeStatement(pstmt); DB.closeResultSet(rs); } // m_restrictions = new MGoalRestriction[list.size()]; list.toArray(m_restrictions); return m_restrictions; } // getRestrictions
/** * Get Field Lookup Value Direct * * @param windowNo Window * @param AD_Field_ID * @param keyValues array of id values * @param cache * @return list of display values */ public ArrayList<NamePair> getLookupValueDirect( int AD_Field_ID, ArrayList<String> keyValues, boolean cache) { int windowNo = 0; // No Context ArrayList<NamePair> displayValues = new ArrayList<NamePair>(); UIField field = getField(AD_Field_ID, windowNo); // if (cache && field.isLookup()) // field.getLookup().removeAllElements(); if (field == null) log.warning("Cannot find AD_Field_ID=" + AD_Field_ID); // for (int i = 0; i < keyValues.size(); i++) { String key = keyValues.get(i); String value = null; if (field != null) value = field.getLookupDisplay(m_context, windowNo, key, cache); if (value == null) { /* * if(key == null) value = ""; else value = "<" + key + ">"; */ value = ""; } NamePair pp = new ValueNamePair(key, value); displayValues.add(pp); } return displayValues; } // getLookupValueDirect
/** * Save (Insert new) Row of Tab * * @param windowNo relative window * @param AD_Tab_ID tab * @param curRow insert after relative row number in results * @param context current (relevant) context of new row * @return error message or null */ public ChangeVO insertRow( int windowNo, int AD_Tab_ID, int queryResultID, int curRow, Map<String, String> context) { if (context == null || context.size() == 0) return new ChangeVO(true, "No Context"); UITab tab = getTab(AD_Tab_ID); if (tab == null) { log.config("Not found AD_Tab_ID=" + AD_Tab_ID); return new ChangeVO(true, "@NotFound@ @AD_Tab_ID@=" + AD_Tab_ID); } log.info("Line Amt:" + context.get("LineNetAmt")); CContext ctx = new CContext(m_context.entrySet()); ctx.addWindow(windowNo, context); ChangeVO retValue = tab.saveRow(ctx, windowNo, true); if (retValue.hasError()) return retValue; // Update Results ArrayList<String[]> data = m_results.get(queryResultID); if (data == null) retValue.addError("Data Not Found"); else { String[] dataRow = retValue.rowData; if (curRow >= data.size()) data.add(dataRow); else data.add(curRow, dataRow); retValue.trxInfo = GridTab.getTrxInfo(tab.getTableName(), ctx, windowNo, tab.getTabNo()); } return retValue; } // insertRow
/** * Get Accessible Goals * * @param ctx context * @return array of goals */ public static MGoal[] getGoals(Ctx ctx) { ArrayList<MGoal> list = new ArrayList<MGoal>(); String sql = "SELECT * FROM PA_Goal WHERE IsActive='Y' " + "ORDER BY SeqNo"; sql = MRole.getDefault(ctx, false) .addAccessSQL(sql, "PA_Goal", false, true); // RW to restrict Access PreparedStatement pstmt = null; ResultSet rs = null; try { pstmt = DB.prepareStatement(sql, (Trx) null); rs = pstmt.executeQuery(); while (rs.next()) { MGoal goal = new MGoal(ctx, rs, null); goal.updateGoal(false); list.add(goal); } } catch (Exception e) { s_log.log(Level.SEVERE, sql, e); } finally { DB.closeStatement(pstmt); DB.closeResultSet(rs); } MGoal[] retValue = new MGoal[list.size()]; list.toArray(retValue); return retValue; } // getGoals
public ChangeVO updateRow( int windowNo, int AD_Tab_ID, int queryResultID, int relRowNo, Map<String, String> context, boolean force) { if (context == null || context.size() == 0) return new ChangeVO(true, Msg.translate(m_context, "NoContext")); ArrayList<String[]> data = m_results.get(queryResultID); if (data == null || data.size() == 0) return new ChangeVO(true, Msg.translate(m_context, "CachedDataNotFound")); UITab tab = getTab(AD_Tab_ID); if (tab == null) { log.config("Not found AD_Tab_ID=" + AD_Tab_ID); return new ChangeVO(true, Msg.translate(m_context, "@NotFound@ @AD_Tab_ID@=" + AD_Tab_ID)); } CContext ctx = new CContext(m_context.entrySet()); ctx.addWindow(windowNo, context); ChangeVO retValue; if (force) retValue = tab.saveRow(ctx, windowNo, false, null); else retValue = tab.saveRow(ctx, windowNo, false, data.get(relRowNo)); if (retValue.hasError()) return retValue; // Update Results String[] dataRow = retValue.rowData.clone(); data.set(relRowNo, dataRow); postProcessChangeVO(retValue, windowNo, context, dataRow, tab); retValue.trxInfo = GridTab.getTrxInfo(tab.getTableName(), ctx, windowNo, tab.getTabNo()); if (retValue.isRefreshAll()) {} return retValue; }
public static void main(String[] args) { /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */ try { Scanner sc = new Scanner(new File("/home/santosh/Desktop/testData")); int testCases = sc.nextInt(); int i = 0; ArrayList<ArrayList<Integer>> inputArraysList = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> list; while (i++ < testCases) { int n = sc.nextInt(); int k = 0; list = new ArrayList<Integer>(); while (k < n) { list.add(sc.nextInt()); k++; } inputArraysList.add(list); } // System.out.println(inputArraysList.size()); for (ArrayList<Integer> arr : inputArraysList) { countPairs(arr.toArray(new Integer[arr.size()])); } } catch (Exception e) { } }
public int totalNQueens(int n) { StringBuilder[] board = new StringBuilder[n]; for (int i = 0; i < n; i++) { board[i] = new StringBuilder(); for (int j = 0; j < n; j++) { board[i].append('.'); } } for (int i = 0; i < n / 2; i++) { board[0].setCharAt(i, 'Q'); dfs(n, 1, board); board[0].setCharAt(i, '.'); } ArrayList<String[]> aux = new ArrayList<String[]>(); for (String[] k : res) { String[] tmp = new String[n]; for (int i = 0; i < n; i++) { StringBuilder sb = new StringBuilder(k[i]).reverse(); tmp[i] = sb.toString(); } aux.add(tmp); } res.addAll(aux); if (n % 2 != 0) { board[0].setCharAt(n / 2, 'Q'); dfs(n, 1, board); board[0].setCharAt(n / 2, '.'); } return res.size(); }
public String[][] getTabSearchResults(int searchResultID, int rowCount) { ArrayList<String[]> matches = m_results.get(searchResultID); if (matches != null) { if (matches.size() < rowCount) { rowCount = matches.size(); } String[][] result = new String[rowCount][]; int i = 0; for (String[] row : matches) { result[i++] = row; if (i == rowCount) break; } return result; } else { return new String[0][]; } }
public static double Average(ArrayList l) { double accum = 0.0d; Iterator i = l.iterator(); while (i.hasNext()) { Double d = (Double) i.next(); accum += d.doubleValue(); } return (accum / (double) l.size()); }
public void WriteUnparsed(){ //@ToDo : Make this proper java! out.println(" <ValidichroUnparsed>"); int s = unparsed_lines.size(); for(int i=0;i<s;i++){ String line=(String)unparsed_lines.get(i); out.println(" <ValidichroUnparsedLine>"+line+"</ValidichroUnparsedLine>"); } out.println(" </ValidichroUnparsed>"); }
public static ArrayList<String> serializeTree(TreeNode tree) { ArrayList<String> res = new ArrayList<>(); LinkedList<TreeNode> queue = new LinkedList<>(); queue.addLast(tree); while (!queue.isEmpty()) { TreeNode node = queue.removeFirst(); if (node == null) { res.add(NULL); } else { res.add(String.valueOf(node.val)); queue.add(node.left); queue.add(node.right); } } while (res.size() > 1 && res.get(res.size() - 1).equals(NULL)) { res.remove(res.size() - 1); } return res; }
/** * @param type * @return * @throws IOException */ public Section[] getSections(final int type) throws IOException { final ArrayList<Section> result = new ArrayList<Section>(); final Section[] secs = getSections(); for (Section section : secs) { if (type == section.getType()) { result.add(section); } } return result.toArray(new Section[result.size()]); }
/** Fill Tab and Field arrays */ private void fillTabsFieldsAndInitFieldsAndCreateDependencyRelations(UIWindow win, int windowNO) { ArrayList<UITab> tabs = win.getTabs(); for (int j = 0; j < tabs.size(); j++) { UITab winTab = tabs.get(j); Integer tabKey = Integer.valueOf(winTab.getAD_Tab_ID()); Integer ReferencetabKey = Integer.valueOf(winTab.getReferenced_Tab_ID()); m_tabs.put(tabKey, winTab); m_referencetabs.put(ReferencetabKey, winTab); // ArrayList<UIField> fields = winTab.getFields(); for (int k = 0; k < fields.size(); k++) { UIField field = fields.get(k); field.initialize(m_context, windowNO); Integer fieldKey = Integer.valueOf(field.getAD_Field_ID()); // set the correct value if (field.isLookup()) field.getLookup().setContext(m_context, windowNO); m_fields.put(fieldKey, field); } winTab.createDependencyRelations(); } } // fillTabsFields
/** * Execute Query for Tab * * @param AD_Tab_ID tab * @param queryVO optional query * @param context record context for link columns and other variables * @param queryResultID stored query identifier provided by client * @return number of records or -1 if error */ public int executeQuery( int AD_Tab_ID, QueryVO queryVO, HashMap<String, String> context, int queryResultID) { UITab tab = getTab(AD_Tab_ID); if (tab == null) { log.config("Not found AD_Tab_ID=" + AD_Tab_ID); return -1; } ArrayList<String[]> result = tab.executeQueryString(queryVO, context, m_context); if (result == null) { log.config("Not Result for AD_Tab_ID=" + AD_Tab_ID); return -1; } MRole role = getRole(); // return -1 to indicate query exceeds if (role.isQueryMax(result.size())) { m_results.put(queryResultID, new ArrayList<String[]>()); return -1; } m_results.put(queryResultID, result); return result.size(); } // executeQuery
Point[] getConvex(Point[] points) { ArrayList<Point> hull = new ArrayList<Point>(); for (Point p : points) { while (hull.size() >= 2 && !isConvex(hull.get(hull.size() - 2), hull.get(hull.size() - 1), p)) { hull.remove(hull.size() - 1); } hull.add(p); } while (hull.size() >= 2 && hull.get(hull.size() - 1).x == hull.get(hull.size() - 2).x) { hull.remove(hull.size() - 1); } return hull.toArray(new Point[0]); }
public static String[] getZipList(String zipFile) throws ZipException, IOException { File file = new File(zipFile); ZipFile zip = new ZipFile(file); Enumeration<? extends ZipEntry> zipFileEntries = zip.entries(); ArrayList<String> files = new ArrayList<String>(); // Process each entry while (zipFileEntries.hasMoreElements()) { // grab a zip file entry ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); String currentEntry = entry.getName(); files.add(currentEntry); } return files.toArray(new String[files.size()]); }
/** * Get Goals with Measure * * @param ctx context * @param PA_Measure_ID measure * @return goals */ public static MGoal[] getMeasureGoals(Ctx ctx, int PA_Measure_ID) { ArrayList<MGoal> list = new ArrayList<MGoal>(); String sql = "SELECT * FROM PA_Goal WHERE IsActive='Y' AND PA_Measure_ID=? " + "ORDER BY SeqNo"; PreparedStatement pstmt = null; ResultSet rs = null; try { pstmt = DB.prepareStatement(sql, (Trx) null); pstmt.setInt(1, PA_Measure_ID); rs = pstmt.executeQuery(); while (rs.next()) list.add(new MGoal(ctx, rs, null)); } catch (Exception e) { s_log.log(Level.SEVERE, sql, e); } finally { DB.closeStatement(pstmt); DB.closeResultSet(rs); } MGoal[] retValue = new MGoal[list.size()]; list.toArray(retValue); return retValue; } // getMeasureGoals
/** * Gets the instances of <CODE>Template</CODE> that have an ID that is already in the database. * * @return An <CODE>ArrayList</CODE> containing the instances of <CODE>Template</CODE> already in * the database. * @throws java.sql.SQLException Thrown on sql exception. */ public ArrayList findTemplatesInDatabase() throws java.sql.SQLException { ArrayList templatesInDatabase = new ArrayList(); Connection oracleConnection = getDataSource().getConnection(); try { Statement query = oracleConnection.createStatement(); try { StringBuffer sql = new StringBuffer("SELECT TMPL_ID FROM "); sql.append(MPSBrowserView.SCHEMA); sql.append(".TEMPLATE WHERE TMPL_ID IN ("); ArrayList templates = getTemplates(); int templateCount = templates.size(); for (int i = 0; i < templateCount; i++) { if (i > 0) sql.append(", "); sql.append("'"); sql.append(((Template) templates.get(i)).getID()); sql.append("'"); } sql.append(")"); ResultSet result = query.executeQuery(sql.toString()); try { while (result.next()) { String templateID = result.getString("TMPL_ID"); for (int i = 0; i < templateCount; i++) { Template currentTemplate = (Template) templates.get(i); if (templateID.equals(currentTemplate.getID())) { templatesInDatabase.add(currentTemplate); currentTemplate.setInDatabase(true); } } } } finally { result.close(); } } finally { query.close(); } } finally { oracleConnection.close(); } return templatesInDatabase; }
/** * Get User Goals * * @param ctx context * @param AD_User_ID user * @return array of goals */ public static MGoal[] getUserGoals(Ctx ctx) { int AD_Role_ID = ctx.getAD_Role_ID(); MRole role = MRole.get(ctx, AD_Role_ID); int AD_User_ID = ctx.getAD_User_ID(); if (AD_User_ID < 0) return getTestGoals(ctx); ArrayList<MGoal> list = new ArrayList<MGoal>(); String sql = "SELECT * FROM PA_Goal g " + "WHERE IsActive='Y'" + " AND AD_Client_ID=?" // #1 + " AND ("; if (!role.isWebStoreRole()) sql += " (AD_User_ID IS NULL AND AD_Role_ID IS NULL) OR "; sql += " AD_User_ID=?" // #2 + " OR EXISTS (SELECT * FROM AD_User_Roles ur " + "WHERE ?=ur.AD_User_ID AND g.AD_Role_ID=ur.AD_Role_ID AND ur.IsActive='Y')) " + "ORDER BY SeqNo"; PreparedStatement pstmt = null; ResultSet rs = null; try { pstmt = DB.prepareStatement(sql, (Trx) null); pstmt.setInt(1, ctx.getAD_Client_ID()); pstmt.setInt(2, AD_User_ID); pstmt.setInt(3, AD_User_ID); rs = pstmt.executeQuery(); while (rs.next()) { MGoal goal = new MGoal(ctx, rs, null); goal.updateGoal(false); list.add(goal); } } catch (Exception e) { s_log.log(Level.SEVERE, sql, e); } finally { DB.closeResultSet(rs); DB.closeStatement(pstmt); } MGoal[] retValue = new MGoal[list.size()]; list.toArray(retValue); return retValue; } // getUserGoals
/** * Get Field Lookup Value Direct * * @param windowNo Window * @param AD_Field_ID * @param keyValues array of id values * @param cache * @return list of display values */ public ArrayList<String> getLookupValueOnlyDirect( int AD_Field_ID, ArrayList<String> keyValues, boolean cache) { int windowNo = 0; // No Context ArrayList<String> displayValues = new ArrayList<String>(); UIField field = getField(AD_Field_ID, windowNo); if (field == null) log.warning("Cannot find AD_Field_ID=" + AD_Field_ID); // for (int i = 0; i < keyValues.size(); i++) { String key = keyValues.get(i); String value = null; if (field != null) value = field.getLookupDisplay(m_context, windowNo, key, cache); if (value == null) { /* * if(key == null) value = ""; else value = "<" + key + ">"; */ value = ""; } displayValues.add(value); } return displayValues; } // getLookupValueDirect
/* - This reads the file and hashses the document, which are then stored in our arrayLisrs - we do this before, so we dont have to hash again later ( which is time consuming) */ private static void preliminaryStep(String dir) throws Exception { int start = 0; // start of the sliding window int end = start + window - 1; // ending boundary // prepoccessing step to hash the document, since we dont need to hash the document again for (int i = 0; i < fileList.size(); ++i) { // System.out.println("preliminaryStep " + fileList.get(i)); Path p = Paths.get(dir + fileList.get(i)); // read this file byte[] array = Files.readAllBytes(p); // read the file in bytes // System.out.println(array.length); ArrayList<Long> md5Hashes = new ArrayList<Long>(); // make a new arrayList for this document HashDocument.hashDocument( array, md5Hashes, start, end); // this hashes the entire document using the window and stores itto md5hashes array // add the fileArray and hashedFile to our lists so we can use them later to run the // algorithms // note we hash and read file before, so we don't have to do it again fileArray.add(array); hashed_File_List.add(md5Hashes); } }
/** * Retrieve results for Tab. If the from/to range does not exist, it returns existing rows * * @param queryResultID stored query identifier provided by client * @param fromRow from row first is 0 * @param noRows number of rows * @return array of rows of array of field values or null if error. You get the columnNames via * String[] columns = uiTab.getColumnNames(); */ public String[][] getResults(int queryResultID, int fromRow, int noRows) { if (noRows < 0) { log.config("Invalid: fromRow=" + fromRow + ",noRows" + noRows); } else if (noRows == 0) return new String[][] {}; // ArrayList<String[]> resultAll = m_results.get(queryResultID); if (resultAll == null) { log.config("No Results for queryResultID=" + queryResultID); return null; } if (resultAll.size() < fromRow) { log.config( "Insufficient Results for queryResultID=" + queryResultID + ", Length=" + resultAll.size() + ", fromRow=" + fromRow); return null; } // copy if (resultAll.size() < noRows) { log.config( "Insufficient Rows for queryResultID=" + queryResultID + ", Length=" + resultAll.size() + ", fromRow=" + fromRow + ", noRows=" + noRows); noRows = resultAll.size(); } String[][] result = new String[noRows][]; for (int i = 0; i < noRows; i++) { int index = i + fromRow; if (index >= resultAll.size()) break; result[i] = resultAll.get(index); } return result; } // getResult
// Method to return a list of matches according to fields for a tab, using // the cached results // this does not store the result in the cache - this behavior is deferred // to the caller private int searchTabResults( int WindowNo, UITab tab, List<Integer> fieldIds, int queryResultID, int searchResultID, String query, int rowCount) { ArrayList<String[]> results = m_results.get(queryResultID); if (query.trim().equals("")) { m_results.put(searchResultID, results); return results.size(); } ScoreStrategy scorer = new ScoreStrategy(query); ScoreCell[] scores = new ScoreCell[results.size()]; // first initialize score cells int j = 0; for (String[] result : results) { // initialize score cells ScoreCell score = new ScoreCell(); score.row = result; score.score = scorer.createScore(); scores[j++] = score; } for (int id : fieldIds) { UIField field = getField(id, WindowNo); final int idx = tab.getFieldIndex(id); if (field.isLookup()) { ArrayList<String> fieldValues = new ArrayList<String>(results.size()); for (String[] row : results) { fieldValues.add(row[idx]); } ArrayList<String> sorts = getLookupValueOnlyDirect(id, fieldValues, true); int i = 0; for (String value : sorts) { scorer.getScore(value, scores[i].score); i++; } } else { int i = 0; for (String[] row : results) { String value = row[idx]; scorer.getScore(value, scores[i].score); i++; } } } ArrayList<ScoreCell> matchingScores = new ArrayList<ScoreCell>(); for (ScoreCell cell : scores) { if (cell.score.isMatch) { matchingScores.add(cell); } } Collections.sort(matchingScores, scorer); ArrayList<String[]> matches = new ArrayList<String[]>(); for (ScoreCell score : matchingScores) { matches.add(score.row); } m_results.put(searchResultID, matches); return matches.size(); }
/** Business logic to execute. */ public VOListResponse loadOutDeliveryNotesForSaleDoc( GridParams pars, String serverLanguageId, String username, ArrayList companiesList) throws Throwable { PreparedStatement pstmt = null; Connection conn = null; try { if (this.conn == null) conn = getConn(); else conn = this.conn; // retrieve companies list... String companies = ""; for (int i = 0; i < companiesList.size(); i++) companies += "'" + companiesList.get(i).toString() + "',"; companies = companies.substring(0, companies.length() - 1); String sql = "select DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01,DOC08_DELIVERY_NOTES.DOC_TYPE," + "DOC08_DELIVERY_NOTES.DOC_YEAR,DOC08_DELIVERY_NOTES.DOC_NUMBER,DOC08_DELIVERY_NOTES.DOC_DATE, " + "DOC08_DELIVERY_NOTES.DESTINATION_CODE_REG18,DOC08_DELIVERY_NOTES.DESCRIPTION," + "DOC08_DELIVERY_NOTES.DOC_SEQUENCE " + " from DOC08_DELIVERY_NOTES where " + "DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01 in (" + companies + ") and " + "DOC08_DELIVERY_NOTES.ENABLED='Y' and " + "DOC08_DELIVERY_NOTES.DOC_TYPE=? and " + "DOC08_DELIVERY_NOTES.DOC_STATE=? and " + "(DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01,DOC08_DELIVERY_NOTES.DOC_TYPE,DOC08_DELIVERY_NOTES.DOC_YEAR,DOC08_DELIVERY_NOTES.DOC_NUMBER) " + " in (select DOC10_OUT_DELIVERY_NOTE_ITEMS.COMPANY_CODE_SYS01,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_TYPE,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_YEAR,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_NUMBER " + " from DOC10_OUT_DELIVERY_NOTE_ITEMS where " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.COMPANY_CODE_SYS01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_TYPE_DOC01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_YEAR_DOC01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_NUMBER_DOC01=? "; DetailSaleDocVO docVO = (DetailSaleDocVO) pars.getOtherGridParams().get(ApplicationConsts.SALE_DOC_VO); // invoice document... if (docVO.getDocNumberDOC01() == null) sql += " and DOC10_OUT_DELIVERY_NOTE_ITEMS.QTY-DOC10_OUT_DELIVERY_NOTE_ITEMS.INVOICE_QTY>0)"; else sql += ")"; Map attribute2dbField = new HashMap(); attribute2dbField.put("companyCodeSys01DOC08", "DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01"); attribute2dbField.put("docTypeDOC08", "DOC08_DELIVERY_NOTES.DOC_TYPE"); attribute2dbField.put("docYearDOC08", "DOC08_DELIVERY_NOTES.DOC_YEAR"); attribute2dbField.put("docNumberDOC08", "DOC08_DELIVERY_NOTES.DOC_NUMBER"); attribute2dbField.put("docDateDOC08", "DOC08_DELIVERY_NOTES.DOC_DATE"); attribute2dbField.put( "destinationCodeReg18DOC08", "DOC08_DELIVERY_NOTES.DESTINATION_CODE_REG18"); attribute2dbField.put("descriptionDOC08", "DOC08_DELIVERY_NOTES.DESCRIPTION"); attribute2dbField.put("docSequenceDOC08", "DOC08_DELIVERY_NOTES.DOC_SEQUENCE"); ArrayList values = new ArrayList(); values.add(ApplicationConsts.OUT_DELIVERY_NOTE_DOC_TYPE); values.add(ApplicationConsts.CLOSED); values.add(docVO.getCompanyCodeSys01DOC01()); values.add(docVO.getDocTypeDoc01DOC01()); values.add(docVO.getDocYearDoc01DOC01()); values.add(docVO.getDocNumberDoc01DOC01()); // read from DOC08 table... Response res = QueryUtil.getQuery( conn, new UserSessionParameters(username), sql, values, attribute2dbField, OutDeliveryNotesVO.class, "Y", "N", null, pars, true); if (res.isError()) throw new Exception(res.getErrorMessage()); // check if the invoice document has been already created and there exists delivery notes // linked to it... if (docVO.getDocNumberDOC01() != null) { pstmt = conn.prepareStatement( "select DOC08_DELIVERY_NOTES.DOC_NUMBER from DOC08_DELIVERY_NOTES where " + "DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01 in (" + companies + ") and " + "DOC08_DELIVERY_NOTES.ENABLED='Y' and " + "DOC08_DELIVERY_NOTES.DOC_TYPE=? and " + "DOC08_DELIVERY_NOTES.DOC_STATE=? and " + "(DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01,DOC08_DELIVERY_NOTES.DOC_TYPE,DOC08_DELIVERY_NOTES.DOC_YEAR,DOC08_DELIVERY_NOTES.DOC_NUMBER) " + " in (select DOC10_OUT_DELIVERY_NOTE_ITEMS.COMPANY_CODE_SYS01,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_TYPE,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_YEAR,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_NUMBER " + " from DOC10_OUT_DELIVERY_NOTE_ITEMS,DOC02_SELLING_ITEMS where " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.COMPANY_CODE_SYS01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_TYPE_DOC01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_YEAR_DOC01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_NUMBER_DOC01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.COMPANY_CODE_SYS01=DOC02_SELLING_ITEMS.COMPANY_CODE_SYS01 and " + " DOC02_SELLING_ITEMS.DOC_TYPE=? and " + " DOC02_SELLING_ITEMS.DOC_YEAR=? and " + " DOC02_SELLING_ITEMS.DOC_NUMBER=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.ITEM_CODE_ITM01=DOC02_SELLING_ITEMS.ITEM_CODE_ITM01)"); pstmt.setString(1, ApplicationConsts.OUT_DELIVERY_NOTE_DOC_TYPE); pstmt.setString(2, ApplicationConsts.CLOSED); pstmt.setString(3, docVO.getCompanyCodeSys01DOC01()); pstmt.setString(4, docVO.getDocTypeDoc01DOC01()); pstmt.setBigDecimal(5, docVO.getDocYearDoc01DOC01()); pstmt.setBigDecimal(6, docVO.getDocNumberDoc01DOC01()); pstmt.setString(7, docVO.getDocTypeDOC01()); pstmt.setBigDecimal(8, docVO.getDocYearDOC01()); pstmt.setBigDecimal(9, docVO.getDocNumberDOC01()); HashSet docNumberDOC08s = new HashSet(); ResultSet rset = pstmt.executeQuery(); while (rset.next()) docNumberDOC08s.add(rset.getBigDecimal(1)); rset.close(); java.util.List rows = ((VOListResponse) res).getRows(); OutDeliveryNotesVO vo = null; for (int i = 0; i < rows.size(); i++) { vo = (OutDeliveryNotesVO) rows.get(i); if (docNumberDOC08s.contains(vo.getDocNumberDOC08())) vo.setSelected(Boolean.TRUE); } } Response answer = res; if (answer.isError()) throw new Exception(answer.getErrorMessage()); else return (VOListResponse) answer; } catch (Throwable ex) { Logger.error( username, this.getClass().getName(), "executeCommand", "Error while fetching out delivery notes list, related to the specified sale document", ex); throw new Exception(ex.getMessage()); } finally { try { pstmt.close(); } catch (Exception exx) { } try { if (this.conn == null && conn != null) { // close only local connection conn.commit(); conn.close(); } } catch (Exception exx) { } } }
/* ------------------------------------------------------------------------------------------------------- This method: -- Takes in three paramters: 1. array - this is the byte array that actually holds the document contents 2. md5Hases - holds the entire hash values of the document 3. Divisor1/Divisor2 - main and back up divisor 5. The remainder we are looking for 6/7. min/max boundaries 8. blockFreq - store the block sizes and how many time's they occur -- We are simply choping up the first file -------------------------------------------------------------------------------------------------------- */ private static int chopDocument( byte[] array, ArrayList<Long> md5Hashes, long divisor1, long divisor2, long divisor3, long remainder, long minBoundary, long maxBoundary, HashMap<Integer, Integer> blockFreq) { int documentStart = 0; // used to keep track of where the boundaries are boolean match = false; // used to ck if we encountered a match int backUpBreakPoint = -1; // used to store the backup breakpoint int secondBackUpBreakPoint = -1; // this is the second backup point with the divisor3 StringBuilder builder = new StringBuilder(); int counter = 0; int i = documentStart + (int) minBoundary - 1; // so we start at the minimum // loop through all the values in the document for (; i < md5Hashes.size(); ++i) { if (md5Hashes.get(i) % divisor1 == remainder) // ck if this equals the mod value { int size = i - documentStart + 1; // we only care about the size if (blockFreq.get(size) == null) // if not in there, then simply store it blockFreq.put(size, 1); else // increment it's integer count blockFreq.put(size, blockFreq.get(size) + 1); // increment the count counter++; // increment the block count documentStart = i + 1; // set this as the beginning of the new boundary backUpBreakPoint = -1; // reset this secondBackUpBreakPoint = -1; // second backup point reset it! i = i + (int) minBoundary - 1; // skip all the way here } else if (md5Hashes.get(i) % divisor2 == remainder) { // check if this is the backup point backUpBreakPoint = i; // this is the backup breakpoint } else if (md5Hashes.get(i) % divisor3 == remainder) { secondBackUpBreakPoint = i; // we found a second backup point with divisor3 } if ((i - documentStart + 1) >= maxBoundary) { // we have reached the maximum // ck if we have a backUpbreakpoint int point; if (backUpBreakPoint != -1) // if we do, set this as the boundary point = backUpBreakPoint; else if (secondBackUpBreakPoint != -1) point = secondBackUpBreakPoint; // if we don't have a first backup, ck if we have a second else point = i; // else this current value of i is the breakpoint // Hash all the values in the range (documentStart,point // Remember we only want to hash the original VALUES from the array that contains the // original // content of the file. Not the hash values in the md5Hash Array int size = point - documentStart + 1; // we only care about the size if (blockFreq.get(size) == null) // if not in there, then simply store it blockFreq.put(size, 1); else // increment it's integer count blockFreq.put(size, blockFreq.get(size) + 1); // increment the count counter++; // increment the block count documentStart = point + 1; // set this as the beginning of the new boundary backUpBreakPoint = -1; // reset this secondBackUpBreakPoint = -1; // reset second backup break point i = point + (int) minBoundary - 1; // so we start at the minimum } } // end of the for loop // ------------------------------------------------------------------------------------------- // we are missing the last boundary, so hash that last value // We will also check against our values of the strings we already have, and if we encountered // this // already, then we will simply increment the counter, otherwise we will insert it in the // hashtable // and increase our miss counter // ---------------------------------------------------------------------------------------------- int size = array.length - documentStart; // we start from the point if (blockFreq.get(size) == null) // if not in there, then simply store it blockFreq.put(size, 1); else // increment it's integer count blockFreq.put(size, blockFreq.get(size) + 1); // increment the count return ++counter; // increment the block count } // end of the method
/* -- This is a helper method to run the periodic dataset basically */ private static void runPeriodic() throws Exception { System.out.println("Running TDDD Periodic"); // this is alll the directories we will be running int arr[] = {10, 15, 20, 25, 30}; // this is the input number we will be running on // this is the base of the two files // these two are directories, we will concanate with the numbers to get the full dir name String base_old_file = "../../thesis-datasets/input_"; String base_new_file = "../../thesis-datasets/periodic_"; int total_iter_count = 0; // this is used check how many times we will iterate through the data so we can make an // array of that size for (int i = startBoundary; i <= endBoundary; i += increment) total_iter_count++; for (int dir_num : arr) { // set up our directories String old_file_dir = base_old_file + dir_num + "/"; String new_file_dir = base_new_file + dir_num + "/"; System.out.println(old_file_dir); // read all the files in these two directories in sorted order ArrayList<String> old_file_list = new ArrayList<String>(); ArrayList<String> new_file_list = new ArrayList<String>(); ReadFile.readFile(old_file_dir, old_file_list); ReadFile.readFile(new_file_dir, new_file_list); // used to store all the runnings for the periodic data double[] block_size_list = new double[total_iter_count]; double[] ratio_size_list = new double[total_iter_count]; int totalRuns = 0; for (int i = 0; i < old_file_list.size(); ++i) { // System.out.println(old_file_list.get(i) + " " + new_file_list.get(i)); String[] s1 = old_file_list.get(i).split("_"); String[] s2 = new_file_list.get(i).split("_"); // input file should corrospond to the output file if (!s1[1].equals(s2[1]) || !s1[2].equals(s2[2])) System.out.println("We got a huge problem"); // basically same code as in the prelinaryStep method, but we need to modify it for // perdiodic files int start = 0; // start of the sliding window int end = start + window - 1; // ending boundary // we cant call preliminary function, so hash the two files individually // System.out.println("preliminaryStep " + fileList.get(i)); Path p = Paths.get( old_file_dir + old_file_list.get( i)); // read the old file ( the one which we will be using as the base // comparason) Path p2 = Paths.get( new_file_dir + new_file_list.get( i)); // read the old file ( the one which we will be using as the base // comparason) byte[] old_file = Files.readAllBytes(p); // read the file in bytes byte[] new_file = Files.readAllBytes(p2); // System.out.println(array.length); ArrayList<Long> old_file_hashes = new ArrayList<Long>(); // make a new arrayList for this document ArrayList<Long> new_file_hashes = new ArrayList<Long>(); // make a new arrayList for this document HashDocument.hashDocument( old_file, old_file_hashes, start, end); // this hashes the entire document using the window and stores itto md5hashes // array HashDocument.hashDocument( new_file, new_file_hashes, start, end); // this hashes the entire document using the window and stores itto md5hashes // array // now call the startCdc method totalSize = new_file.length; // this is the length of the file startCDC( block_size_list, ratio_size_list, new_file, old_file, new_file_hashes, old_file_hashes); if (totalRuns % 10 == 0) System.out.println(totalRuns); totalRuns++; } // now output the results System.out.println("File dir = " + dir_num + " totalRuns = " + totalRuns); int index = 0; for (int i = startBoundary; i <= endBoundary; i += increment) { // avg out the outputs double blockSize = block_size_list[index] / (double) totalRuns; double ratio = ratio_size_list[index] / (double) totalRuns; System.out.println(i + " " + blockSize + " " + ratio); index++; } // now each index matches the corrosponding file } } // end of methid
/* ------------------------------------------------------------------------------------------------------- This method: This method: -- Takes in three paramters: 1. array - this is the byte array that actually holds the document contents 2. md5Hases - holds the entire hash values of the document 3. Divisor1/Divisor2/divisor3... - main and back up divisors 5. The remainder we are looking for 6/7. min/max boundaries -- We will start running the karb rabin algorithm -- We will find the boundaries using mod values and once they equal the mod value we have stored -- we also have the divsor2/3 .. which are backup divisors. If we don't find a boundary by the divisor1 once we hit the maxBoundary -- we will see if we have one with divisor2, if not, then we will see if we have one with divisor3 and so on -- We will hash everything in that hash boundary and store it -------------------------------------------------------------------------------------------------------- */ private static void runTddd( byte[] array, ArrayList<Long> md5Hashes, long divisor1, long divisor2, long divisor3, long remainder, long minBoundary, long maxBoundary) { int documentStart = 0; // used to keep track of where the boundaries are boolean match = false; // used to ck if we encountered a match int backUpBreakPoint = -1; // used to store the backup breakpoint int secondBackUpBreakPoint = -1; // used with the divisor3 StringBuilder builder = new StringBuilder(); int i = documentStart + (int) minBoundary - 1; // so we start at the minimum // loop through all the values in the document for (; i < md5Hashes.size() - 1; ++i) { // if ((i - documentStart + 1) < minBoundary) // if the size of this boundary is less than // the min, continue looping // continue; /*----------------------------------------------------------------- - If the mod of this equals the modvalue we defined, then - this is a boundary ------------------------------------------------------------------*/ if ((md5Hashes.get(i - 1) + md5Hashes.get(i) + md5Hashes.get(i + 1)) % divisor1 == remainder) // ck if this equals the mod value { // Hash all the values in the range (documentStart,current(i)) // Remember we only want to hash the original VALUES from the array that contains the // original // content of the file. Not the hash values in the md5Hash Array for (int j = documentStart; j <= i; ++j) { builder.append(array[j]); // store everything upto the current value } String original = builder.toString(); // if the string is a perfect match ( hash and original string) if (HashClass.is_string_match(original, table)) // iinsert the hash in the table) coverage += i - documentStart + 1; // this is the amount of bytes we saved documentStart = i + 1; // set this as the beginning of the new boundary backUpBreakPoint = -1; // reset this secondBackUpBreakPoint = -1; numOfPieces++; // increment the num of pieces i = i + (int) minBoundary - 1; // skip all the way here builder.setLength(0); // reset the stringBuilder for the next round } else if ((md5Hashes.get(i - 1) + md5Hashes.get(i) + md5Hashes.get(i + 1)) % divisor2 == remainder) { // check if this is the backup point backUpBreakPoint = i; // this is the backup breakpoint } else if ((md5Hashes.get(i - 1) + md5Hashes.get(i) + md5Hashes.get(i + 1)) % divisor2 == remainder) { secondBackUpBreakPoint = i; // set the second backup point } if ((i - documentStart + 1) >= maxBoundary) { // we have reached the maximum // ck if we have a backUpbreakpoint int point; if (backUpBreakPoint != -1) // if we do, set this as the boundary point = backUpBreakPoint; else if (secondBackUpBreakPoint != -1) { point = secondBackUpBreakPoint; // if we don't have a first break point, find the second } else point = i; // else this current value of i is the breakpoint // Hash all the values in the range (documentStart,current(i)) // Remember we only want to hash the original VALUES from the array that contains the // original // content of the file. Not the hash values in the md5Hash Array for (int j = documentStart; j <= point; ++j) { builder.append(array[j]); // store everything upto the current value } String original = builder.toString(); if (HashClass.is_string_match(original, table)) coverage += point - documentStart + 1; // this is the amount of bytes we saved numOfPieces++; // increment the num of pieces documentStart = point + 1; // set this as the beginning of the new boundary backUpBreakPoint = -1; // reset this secondBackUpBreakPoint = -1; // reset the secondBackUp point i = point + (int) minBoundary - 1; // skip all the way here ; builder.setLength(0); // reset the stringBuilder for the next round } } // end of the for loop // ------------------------------------------------------------------------------------------- // we are missing the last boundary, so hash that last value // We will also check against our values of the strings we already have, and if we encountered // this // already, then we will simply increment the counter, otherwise we will insert it in the // hashtable // and increase our miss counter // ---------------------------------------------------------------------------------------------- for (int j = documentStart; j < array.length; ++j) { builder.append(array[j]); } // only compute hash and insert into our hashtable only if the string buffer isn't empty String original = builder.toString(); if (HashClass.is_string_match(original, table)) coverage += array.length - documentStart; // this is the amount of bytes we saved numOfPieces++; // increment the num of pieces } // end of the method