Как правильно обрабатывать сохранение файлов в проекте платформы NetBeans (плагин)

Я пытаюсь создать новую языковую поддержку для NetBeans 7.4 и выше.

Когда файлы сохраняются локально, мне нужно развернуть их на сервере. Поэтому мне нужно обработать событие сохранения. Я сделал это, реализуя Savable:


     public class VFDataObject extends MultiDataObject implements Savable {
       .......
       @Override
       public void save() throws IOException {
         .......
       }
     }

И это отлично сработало для события Save. Но потом я понял, что мне нужно расширить HtmlDataObject вместо MultiDataObject:


    public class VFDataObject extends HtmlDataObject implements Savable {
       .......
       @Override
       public void save() throws IOException {
         .......
       }
    }

И теперь save() не выполняется. Зачем? Так как HtmlDataObject расширяет MultiDataObject. Что нужно сделать, чтобы сделать эту работу?

Также есть ли способ перехватить событие "Сохранить все" в NetBeans? Есть ли у вас информация о том, изменилось ли что-либо в 8.0 в этом отношении?

Большое спасибо.

1 ответ

Решение

Вы пробовали SPI OnSaveTask ( https://netbeans.org/bugzilla/show_bug.cgi?id=140719)? API можно использовать для выполнения задач при сохранении файлов данного типа.

Нечто подобное можно использовать для прослушивания всех событий сохранения для данного типа MIME (в данном случае "text/x-sieve-java"):

public static class CustomOnSaveTask implements OnSaveTask {

    private final Context context;

    public CustomOnSaveTask(Context ctx) {
        context = ctx;
    }

    @Override
    public void performTask() {
        System.out.println(">>> Save performed on " + 
                NbEditorUtilities.getDataObject(context.getDocument()).toString());
    }

    @Override
    public void runLocked(Runnable r) {
        r.run();
    }

    @Override
    public boolean cancel() {
        return true;
    }

    @MimeRegistration(mimeType = "text/x-sieve-java", service = OnSaveTask.Factory.class, position = 1600)
    public static class CustomOnSaveTaskFactory implements OnSaveTask.Factory {

        @Override
        public OnSaveTask createTask(Context cntxt) {
            return new CustomOnSaveTask(cntxt);
        }

    }
}
Другие вопросы по тегам