package is.idega.idegaweb.campus.block.phone.presentation; import is.idega.idegaweb.campus.block.phone.business.PhoneFileHandler; import is.idega.idegaweb.campus.block.phone.data.PhoneFileInfo; import java.io.File; import java.io.FilenameFilter; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Vector; import com.idega.block.finance.presentation.Finance; import com.idega.data.EntityFinder; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWResourceBundle; import com.idega.idegaweb.presentation.BusyBar; import com.idega.io.UploadFile; import com.idega.presentation.IWContext; import com.idega.presentation.PresentationObject; import com.idega.presentation.Table; import com.idega.presentation.text.Link; import com.idega.presentation.text.Text; import com.idega.presentation.ui.DataTable; import com.idega.presentation.ui.FileInput; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.HiddenInput; import com.idega.presentation.ui.SubmitButton; import com.idega.presentation.ui.TextInput; import com.idega.presentation.ui.Window; import com.idega.util.IWTimestamp; /** * Title: * Description: * Copyright: Copyright (c) 2000-2001 idega.is All Rights Reserved * Company: idega *@author <a href="mailto:aron@idega.is">Aron Birkir</a> * @version 1.1 */ public class PhoneFiles extends Finance { protected final int ACT1 = 1,ACT2 = 2, ACT3 = 3,ACT4 = 4,ACT5 = 5; private final static String sAction = "cam.ph.file.action"; private final static String IW_BUNDLE_IDENTIFIER="is.idega.idegaweb.campus"; protected IWResourceBundle iwrb; protected IWBundle iwb; protected boolean isAdmin = false; private String dir = "phone"+File.separator+"upload"; public String getLocalizedNameKey(){ return "phonefiles"; } public String getLocalizedNameValue(){ return "Phonefiles"; } protected void control(IWContext iwc){ Table T = new Table(); T.setCellpadding(0); T.setCellspacing(0); T.setWidth(Table.HUNDRED_PERCENT); if(isAdmin){ //T.add(Edit.headerText(iwrb.getLocalizedString("phone_files","Phone Files"),3),1,1); T.add(makeLinkTable( 1),1,2); int iAction = 0; if(iwc.getParameter(sAction )!= null){ iAction = Integer.parseInt(iwc.getParameter(sAction )); } switch (iAction) { case ACT1 : T.add(getReadTable(iwc),1,3); break; case ACT2 : T.add(getProcessTable(iwc),1,3); T.add(getFileUploader(iwc),1,4); break; case ACT3 : uploadFile(iwc); default: T.add(getFileTable(iwc),1,3);T.add(getFileUploader(iwc),1,4); break; } } else T.add(getText(localize("access_denied","Access denied"))); //add(String.valueOf(iSubjectId)); add(T); } protected PresentationObject makeLinkTable(int menuNr){ Table LinkTable = new Table(3,1); int last = 3; LinkTable.setWidth(Table.HUNDRED_PERCENT); LinkTable.setCellpadding(2); LinkTable.setCellspacing(1); LinkTable.setColor(getHeaderColor()); LinkTable.setWidth(last,Table.HUNDRED_PERCENT); return LinkTable; } public String getBundleIdentifier(){ return IW_BUNDLE_IDENTIFIER; } private PresentationObject getReadTable(IWContext iwc){ Form form = new Form(); Table T = new Table(); String fileName = iwc.getParameter("filename"); T.add(getHeader(localize("filename","Filename")),1,1); T.add(getHeader(localize("filesize","Filesize")),2,1); if(fileName != null){ try { File F = new File(dir,fileName); T.add(getText(F.getName()),1,2); T.add(getText(new Long(F.length()).toString()),2,2); T.add(new HiddenInput(sAction,String.valueOf(ACT2))); T.add(new HiddenInput("filename",fileName)); SubmitButton read = new SubmitButton("read",localize("read","Read")); read.setOnClick("this.form.submit()"); BusyBar busy = new BusyBar("phonebusy"); busy.setInterfaceObject(read); T.add(read,3,2); T.add(busy,3,2); } catch (Exception ex) { T.add(getText(localize("no_file","No file")),1,2); } } form.add(T); return form; } private PresentationObject getProcessTable(IWContext iwc){ String fileName = iwc.getParameter("filename"); if(fileName != null){ String filePath = iwc.getIWMainApplication().getApplicationRealPath()+dir+File.separator+fileName; new PhoneFileHandler().processFile(filePath); } return getFileTable(iwc); } private class PhoneFilenameFilter implements FilenameFilter { public boolean accept(File dir,String name){ return (name.endsWith(".del")); } } private PresentationObject getFileTable(IWContext iwc){ DataTable T = new DataTable(); T.addTitle(localize("phone_files","Phone files")); T.setTitlesHorizontal(true); int col = 2; T.add(getHeader(localize("files","Files")),2,1); T.add(getHeader(localize("size","Size")),3,1); T.add(getHeader(localize("status","Status")),4,1); T.add(getHeader(localize("time_read","Read")),5,1); T.add(getHeader(localize("updated","Updated")),6,1); T.add(getHeader(localize("line_count","Count")),7,1); T.add(getHeader(localize("phone_numbers","Numbers")),8,1); T.add(getHeader(localize("amount_read","Amount")),9,1); int row = 2; Map M = mapOfReadFilesByFileName() ; try{ File F = new File(iwc.getIWMainApplication().getApplicationRealPath()+dir); PhoneFilenameFilter filter = new PhoneFilenameFilter(); File[] Fs = F.listFiles(filter); if(Fs!=null && Fs.length > 0){ List allFiles = java.util.Arrays.asList(Fs); Vector all = new Vector(allFiles); Vector unreadFiles = new Vector(allFiles); Iterator iter = unreadFiles.iterator(); while(iter.hasNext()){ F = (File) iter.next(); if(M!= null && M.containsKey(F.getName())) iter.remove(); } all.removeAll(unreadFiles); String name; PhoneFileInfo info; java.text.NumberFormat NF = java.text.NumberFormat.getCurrencyInstance(iwc.getCurrentLocale()); Link V; // Read files Iterator read = all.iterator(); while(read.hasNext()){ F = (File) read.next(); name = F.getName(); V = new Link(iwb.getImage("view.gif")); Window W = new Window("",dir+File.separator+name); W.setResizable(true); V.setWindow(W); T.add(V,1,row); if(M!= null && M.containsKey(name)){ info = (PhoneFileInfo) M.get(name); T.add(getText(name),2,row); T.add(getText(localize("read","Read")),4,row); T.add(getText(info.getReadTime().toString()),5,row); T.add(getText(String.valueOf(info.getLineCount())),7,row); T.add(getText(String.valueOf(info.getNumberCount())),8,row); T.add(getAmountText((info.getTotalAmount())),9,row); } T.add(getText(Long.toString(F.length()/1000)+" KB"),3,row); T.add(getText(new IWTimestamp(F.lastModified()).getLocaleDate(iwc.getCurrentLocale())),6,row); row++; } Iterator unread = unreadFiles.iterator(); while(unread.hasNext()){ F = (File) unread.next(); name = F.getName(); V = new Link(iwb.getImage("view.gif")); Window W = new Window("",dir+File.separator+name); W.setResizable(true); V.setWindow(W); T.add(V,1,row); Link L = new Link(name); L.addParameter(sAction,ACT1); L.addParameter("filename",name); //L.setFontSize(Edit.textFontSize); T.add(L,2,row); T.add(getHeader(localize("unread","Unread")),4,row); T.add(getText(Long.toString(F.length()/1000)+" KB"),3,row); T.add(getText(new IWTimestamp(F.lastModified()).getLocaleDate(iwc.getCurrentLocale())),6,row); row++; } } else{ T.getContentTable().mergeCells(1,row,T.getContentTable().getColumns(),row); T.add(getText(localize("no_files","No files")),1,row); } } catch(Exception e){ e.printStackTrace(); } /* T.setColumnAlignment(4,"right"); T.setColumnAlignment(5,"right"); T.setColumnAlignment(6,"right"); */ T.setWidth("100%"); return T; } private Map mapOfReadFilesByFileName(){ List L = null; Hashtable H = null; try { L = EntityFinder.getInstance().findAll(PhoneFileInfo.class); if(L!= null){ int len = L.size(); H = new Hashtable(len); for (int i = 0; i < len; i++) { PhoneFileInfo info = (PhoneFileInfo) L.get(i); H.put(info.getName(),info); } } } catch (Exception ex) { ex.printStackTrace(); } return H; } private PresentationObject getFileUploader(IWContext iwc) { Form form = new Form(); form.setMultiPart(); form.add(new HiddenInput(sAction, String.valueOf(ACT3))); FileInput chooser = new FileInput(); SubmitButton confirm = new SubmitButton(localize("commit","commit")); Table T = new Table(); T.add(new Text(localize("upload_file","Upload file")),1,1); T.add(chooser,2,1); T.add(new Text(localize("new_file_name","New file name")),3,1); T.add(new TextInput("new_file_name"),4,1); T.add(confirm,5,1); form.add(T); return form; } public void uploadFile(IWContext iwc){ UploadFile file = iwc.getUploadedFile(); String fileName = file.getName(); String newParent = iwc.getIWMainApplication().getApplicationRealPath()+dir; String newFileName = newParent+File.separator+fileName; String changedFileName = iwc.getMultipartParameter("new_file_name"); if(changedFileName !=null && !"".equals(changedFileName)){ fileName = changedFileName; debug("New phone file name was supplied"); } if(file.renameTo(new File(newParent,fileName))) debug("New phone file was uploaded"); } public void main(IWContext iwc){ //isStaff = com.idega.core.accesscontrol.business.AccessControl iwb = getBundle(iwc); iwrb = getResourceBundle(iwc); isAdmin = iwc.hasEditPermission(this); control(iwc); } }