// Path: src/com/noticeditorteam/noticeditor/exceptions/ExportException.java
// public class ExportException extends RuntimeException {
// 
//     public ExportException(Throwable cause) {
//         super(cause);
//     }
// }
// 
// Path: src/com/noticeditorteam/noticeditor/model/NoticeTree.java
// public class NoticeTree {
// 
//     private final NoticeTreeItem root;
// 
//     public NoticeTree() {
//         root = null;
//     }
// 
//     /**
//      * Create NoticeTree with set root
//      *
//      * @param root set root
//      */
//     public NoticeTree(NoticeTreeItem root) {
//         this.root = root;
//     }
// 
//     public NoticeTreeItem getRoot() {
//         return root;
//     }
// 
//     /**
//      * @param item to add
//      * @param parent if null, item will be added to root item.
//      */
//     public void addItem(NoticeTreeItem item, NoticeTreeItem parent) {
//         if (parent == null) {
//             parent = root;
//         } else if (parent.isLeaf()) {
//             parent = (NoticeTreeItem) parent.getParent();
//         }
//         parent.getInternalChildren().add(item);
//         parent.setExpanded(true);
//     }
// 
//     public void removeItem(NoticeTreeItem item) {
//         if (item == null)
//             return;
//         NoticeTreeItem parent = (NoticeTreeItem) item.getParent();
//         if (parent == null)
//             return;
//         parent.getInternalChildren().remove(item);
//     }
// }


import com.noticeditorteam.noticeditor.exceptions.ExportException;
import com.noticeditorteam.noticeditor.model.NoticeTree;
import java.io.File;
import java.io.IOException;
import org.json.JSONException;
package com.noticeditorteam.noticeditor.io;


/**
 * Export document to zip archive with index.json.
 *
 * @author aNNiMON
 */
public class ZipExportStrategy implements ExportStrategy {

    @Override
    public boolean export(File file, NoticeTree notice) {
        try {
            if (file.exists())
                file.delete();
            ZipWithIndexFormat.with(file).export(notice);
            return true;
        } catch (IOException | JSONException e) {
// Path: src/com/noticeditorteam/noticeditor/exceptions/ExportException.java
// public class ExportException extends RuntimeException {
// 
//     public ExportException(Throwable cause) {
//         super(cause);
//     }
// }
// 
// Path: src/com/noticeditorteam/noticeditor/model/NoticeTree.java
// public class NoticeTree {
// 
//     private final NoticeTreeItem root;
// 
//     public NoticeTree() {
//         root = null;
//     }
// 
//     /**
//      * Create NoticeTree with set root
//      *
//      * @param root set root
//      */
//     public NoticeTree(NoticeTreeItem root) {
//         this.root = root;
//     }
// 
//     public NoticeTreeItem getRoot() {
//         return root;
//     }
// 
//     /**
//      * @param item to add
//      * @param parent if null, item will be added to root item.
//      */
//     public void addItem(NoticeTreeItem item, NoticeTreeItem parent) {
//         if (parent == null) {
//             parent = root;
//         } else if (parent.isLeaf()) {
//             parent = (NoticeTreeItem) parent.getParent();
//         }
//         parent.getInternalChildren().add(item);
//         parent.setExpanded(true);
//     }
// 
//     public void removeItem(NoticeTreeItem item) {
//         if (item == null)
//             return;
//         NoticeTreeItem parent = (NoticeTreeItem) item.getParent();
//         if (parent == null)
//             return;
//         parent.getInternalChildren().remove(item);
//     }
// }


// Path: src/com/noticeditorteam/noticeditor/io/ZipExportStrategy.java
import com.noticeditorteam.noticeditor.exceptions.ExportException;
import com.noticeditorteam.noticeditor.model.NoticeTree;
import java.io.File;
import java.io.IOException;
import org.json.JSONException;

package com.noticeditorteam.noticeditor.io;


/**
 * Export document to zip archive with index.json.
 *
 * @author aNNiMON
 */
public class ZipExportStrategy implements ExportStrategy {

    @Override
    public boolean export(File file, NoticeTree notice) {
        try {
            if (file.exists())
                file.delete();
            ZipWithIndexFormat.with(file).export(notice);
            return true;
        } catch (IOException | JSONException e) {
            throw new ExportException(e);