From: <se...@us...> - 2008-05-10 13:02:27
|
Revision: 120 http://acmcontester.svn.sourceforge.net/acmcontester/?rev=120&view=rev Author: sem62 Date: 2008-05-10 06:02:31 -0700 (Sat, 10 May 2008) Log Message: ----------- * Realized deleting resources files from server when deleting item from course tree. * Added method "canDeleteChapter" that determine if you can delete some chapter. * refactoring WSClient's code. Modified Paths: -------------- WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/Chapter/ChapterModel.java WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ResourcedItemModel.java WebEditor/src/edu/lnu/FireFly/WebEditor/WSClients/WebEditorServiceClient.java Added Paths: ----------- WebEditor/service/deleteFile.php Added: WebEditor/service/deleteFile.php =================================================================== --- WebEditor/service/deleteFile.php (rev 0) +++ WebEditor/service/deleteFile.php 2008-05-10 13:02:31 UTC (rev 120) @@ -0,0 +1,7 @@ +<? + require_once("config.inc.php"); + + if (isset($_POST['fName'])){ + delete ($course_location . $_POST['fName']); + } +?> \ No newline at end of file Modified: WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/Chapter/ChapterModel.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/Chapter/ChapterModel.java 2008-05-10 10:09:14 UTC (rev 119) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/Chapter/ChapterModel.java 2008-05-10 13:02:31 UTC (rev 120) @@ -5,9 +5,14 @@ import edu.lnu.FireFly.WebEditor.GUI.TreeDataModel; import edu.lnu.FireFly.WebEditor.GUI.Dialogs.ChapterPropertiestsDlg; import edu.lnu.FireFly.WebEditor.ItemModels.ItemData; +import edu.lnu.FireFly.WebEditor.ItemModels.ItemModel; +import edu.lnu.FireFly.WebEditor.ItemModels.ItemModels; import edu.lnu.FireFly.WebEditor.ItemModels.ResourcedItemModel; +import edu.lnu.FireFly.WebEditor.ItemModels.SummaryPageModel.SummaryPageModel; +import edu.lnu.FireFly.WebEditor.WSClients.WebEditorServiceClient; public class ChapterModel extends ResourcedItemModel { + public ChapterModel() { super(); modelName = "ChapterModel"; @@ -101,17 +106,50 @@ } @Override - public void remove(TreeItem item) { - if (item.getChildCount() > 0) { + public void remove(TreeItem aChapter) { + if (!canDeleteChapter(aChapter)) { System.out .print("This chapter contain items. Please, remove all childs and try again.\n"); return; } + + for (int i=0; i < aChapter.getChildCount(); i++){ + TreeItem item = aChapter.getChild(i); + ItemModel model = ItemModels.getModelFromItem(item); + + model.remove(item); + } - TreeDataModel.getInstance().treeNodesDeleted(item); - item.getParent().removeChild(item); + TreeDataModel.getInstance().treeNodesDeleted(aChapter); + aChapter.getParent().removeChild(aChapter); + + WebEditorServiceClient.getInstance().deleteFile(getConfFileName(aChapter)); } + /** + * Determine if this chapter can deleted.<br> + * Chapter can be deleted, if it have no childs or it containe only summary page. + * + * @param aChapter + * @return true, if this chapter can be deleted. + */ + private boolean canDeleteChapter(TreeItem aChapter) { + boolean result = aChapter.getChildCount() == 0; + + if (!result){ + if (aChapter.getChildCount() == 1){ + TreeItem child = aChapter.getChild(0); + ItemModel model = ItemModels.getModelFromItem(child); + + if (model.getClass() == SummaryPageModel.class){ + return true; + } + } + } + + return result; + } + @Override public void rename(TreeItem item, String newTitle) { ((Item) item).title = newTitle; Modified: WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ResourcedItemModel.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ResourcedItemModel.java 2008-05-10 10:09:14 UTC (rev 119) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/ItemModels/ResourcedItemModel.java 2008-05-10 13:02:31 UTC (rev 120) @@ -3,6 +3,7 @@ import java.io.StringReader; import java.util.UUID; +import edu.lnu.FireFly.FFManifest.Manifest; import edu.lnu.FireFly.FFManifest.TreeItem; import edu.lnu.FireFly.FFManifest.item.Item; import edu.lnu.FireFly.FFManifest.resource.Resource; @@ -44,11 +45,11 @@ ConfigureItem(item); } - protected final String loadResource(String location, String identifier) { + protected final String loadResource(String location, TreeItem anItem) { String res = ""; if (location.equalsIgnoreCase("course")) { - res = WebEditorServiceClient.getInstance().getFileContent(identifier + ".conf", + res = WebEditorServiceClient.getInstance().getFileContent(getConfFileName(anItem), location); } else { res = WebEditorServiceClient.getInstance().getFileContent(modelName + ".conf", @@ -78,11 +79,33 @@ } @Override - public void remove(TreeItem item) { - TreeDataModel.getInstance().treeNodesDeleted(item); - item.getParent().removeChild(item); + public void remove(TreeItem anItem) { + TreeDataModel.getInstance().treeNodesDeleted(anItem); + anItem.getParent().removeChild(anItem); + + deleteResource(anItem); } + private void deleteResource(TreeItem anItem) { + if (canDeleteResource(anItem)){ + Manifest manifest = SummaryPageManager.getInstance().getManifest(); + + String identifier = getIdentifierRef(anItem); + Resource resource = manifest.resources.findResourceByIdentifier(identifier); + + WebEditorServiceClient.getInstance().deleteFile(resource.getFullHref()); + WebEditorServiceClient.getInstance().deleteFile(getConfFileName(anItem)); + + manifest.resources.deleteResource(identifier); + } + } + + private boolean canDeleteResource(TreeItem anItem) { + // TODO need check links to resource from other items in course tree. + + return true; + } + @Override public void rename(TreeItem item, String newTitle) { ((Item) item).title = newTitle; @@ -91,7 +114,7 @@ public final boolean synchronizeItemWithResource(TreeItem anItem, String location) { - String res = loadResource(location, getConfFileName(anItem)); + String res = loadResource(location, anItem); if (res == null || res.trim().equals("")) { return false; @@ -113,13 +136,13 @@ Resource resource = WebEditor.instance.getManifest().resources .findResourceByIdentifier(getIdentifierRef(anItem)); - return resource.identifier; + return resource.identifier + ".conf"; } protected final void initializeDataForItem(Item anItem){ ItemData itemData = createItemDataInstance(); - String res = loadResource("template", getIdentifier(anItem)); + String res = loadResource("template", anItem); itemData.unmarshal(new StringReader(res), anItem); @@ -135,7 +158,7 @@ ItemData itemData = getItemData(anItem); WebEditorServiceClient.getInstance().setFileContent( - getConfFileName(anItem) + ".conf", itemData.marshal(anItem)); + getConfFileName(anItem), itemData.marshal(anItem)); if (updateSummaryPages) { SummaryPageManager.getInstance().updateSummaryPages(); Modified: WebEditor/src/edu/lnu/FireFly/WebEditor/WSClients/WebEditorServiceClient.java =================================================================== --- WebEditor/src/edu/lnu/FireFly/WebEditor/WSClients/WebEditorServiceClient.java 2008-05-10 10:09:14 UTC (rev 119) +++ WebEditor/src/edu/lnu/FireFly/WebEditor/WSClients/WebEditorServiceClient.java 2008-05-10 13:02:31 UTC (rev 120) @@ -3,6 +3,7 @@ import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; @@ -33,8 +34,9 @@ long lastCommunication = WebEditorServiceClient .getInstance().getLastCommunicationTime(); - - if (System.currentTimeMillis() - lastCommunication > Settings.getInstance().getNopInterval()){ + + if (System.currentTimeMillis() - lastCommunication > Settings + .getInstance().getNopInterval()) { WebEditorServiceClient.getInstance().nop(); } } @@ -59,35 +61,89 @@ * @return */ public String getFileContent(String fName, String location) { + return getFileContent(fName, location, true); + } + + public String getFileContent(String fName, String location, boolean useHash) { System.out.println("Getting file's content (fName=" + fName + "; location=" + location + ")..."); - if (location.equalsIgnoreCase("template")) { - String template = templates.get(fName); - if (template != null) { - System.out.println("Founded in templates hash."); - return template; + if (useHash) { + if (location.equalsIgnoreCase("template")) { + String template = templates.get(fName); + if (template != null) { + System.out.println("Founded in templates hash."); + return template; + } + } else { + String content = contents.get(fName); + if (content != null) { + System.out.println("Founded in contents hash."); + return content; + } } - } else { - String content = contents.get(fName); - if (content != null) { - System.out.println("Founded in contents hash."); - return content; - } } - String result = ""; + String data; try { // Construct data - String data = URLEncoder.encode("fName", "UTF-8") + "=" + data = URLEncoder.encode("fName", "UTF-8") + "=" + URLEncoder.encode(fName, "UTF-8"); data += "&" + URLEncoder.encode("location", "UTF-8") + "=" + URLEncoder.encode(location, "UTF-8"); - // Send data + } catch (Exception e) { + e.printStackTrace(); + return null; + } + + String result = getResponse(data, "getFileContent.php"); + + if (location.equalsIgnoreCase("template")) { + templates.put(fName, result); + } else { + contents.put(fName, result); + } + + lastCommunicationTime = System.currentTimeMillis(); + return result; + } + + /** + * @param fName + * File name + * @param location + * Location name = template | course + * @return + */ + public boolean deleteFile(String fName) { + System.out.println("Deleting file (fName=" + fName + ")..."); + + // Construct data + String data; + try { + data = URLEncoder.encode("fName", "UTF-8") + "=" + + URLEncoder.encode(fName, "UTF-8"); + + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + return false; + } + + String result = getResponse(data, "deleteFile.php"); + + System.out.println("deleting result: " + result); + + lastCommunicationTime = System.currentTimeMillis(); + return true; + } + + private String getResponse(String data, String action) { + String result = ""; + try { URL url = new URL(Settings.getInstance().getServiceLocation() - + "getFileContent.php"); + + action); URLConnection conn = url.openConnection(); conn.setDoOutput(true); @@ -109,15 +165,9 @@ rd.close(); } catch (Exception e) { e.printStackTrace(); + return null; } - if (location.equalsIgnoreCase("template")) { - templates.put(fName, result); - } else { - contents.put(fName, result); - } - - lastCommunicationTime = System.currentTimeMillis(); return result; } @@ -132,48 +182,27 @@ contents.put(fName, content); - String result = ""; + String data = ""; try { // Construct data - String data = URLEncoder.encode("fName", "UTF-8") + "=" + data = URLEncoder.encode("fName", "UTF-8") + "=" + URLEncoder.encode(fName, "UTF-8"); data += "&" + URLEncoder.encode("content", "UTF-8") + "=" + URLEncoder.encode(content, "UTF-8"); - - // Send data - URL url = new URL(Settings.getInstance().getServiceLocation() - + "setFileContent.php"); - - URLConnection conn = url.openConnection(); - conn.setDoOutput(true); - - OutputStreamWriter wr = new OutputStreamWriter(conn - .getOutputStream()); - - wr.write(data); - wr.flush(); - - // Get the response - BufferedReader rd = new BufferedReader(new InputStreamReader(conn - .getInputStream())); - String line; - while ((line = rd.readLine()) != null) { - result += line + "\n"; - } - wr.close(); - rd.close(); } catch (Exception e) { e.printStackTrace(); } + getResponse(data, "setFileContent.php"); + lastCommunicationTime = System.currentTimeMillis(); } protected void nop() { lastCommunicationTime = System.currentTimeMillis(); System.out.println("Nop"); - - getFileContent("LectureModel.conf", "template"); + + getFileContent("ChapterModel.conf", "template", false); } protected Thread nopThread; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |