@Override
 public Object invoke(Object object, Method method, Object[] params) throws Throwable {
   final boolean needUpdate = METHOD_COMMIT.equals(method.getName());
   try {
     Object result = method.invoke(myDelegateModel, unwrapParams(params));
     if (result instanceof Library[]) {
       Library[] libraries = (Library[]) result;
       for (int idx = 0; idx < libraries.length; idx++) {
         Library library = libraries[idx];
         libraries[idx] =
             (Library)
                 Proxy.newProxyInstance(
                     getClass().getClassLoader(),
                     new Class[] {LibraryEx.class},
                     new LibraryInvocationHandler(library));
       }
     }
     if (result instanceof Library) {
       result =
           Proxy.newProxyInstance(
               getClass().getClassLoader(),
               new Class[] {LibraryEx.class},
               new LibraryInvocationHandler((Library) result));
     }
     return result;
   } catch (InvocationTargetException e) {
     throw e.getCause();
   } finally {
     if (needUpdate) {
       updateOrderEntriesInEditors(true);
     }
   }
 }
 public Object invoke(Object object, Method method, Object[] params) throws Throwable {
   final boolean needUpdate = METHOD_COMMIT.equals(method.getName());
   try {
     return method.invoke(myDelegateModel, unwrapParams(params));
   } catch (InvocationTargetException e) {
     throw e.getCause();
   } finally {
     if (needUpdate) {
       updateOrderEntriesInEditors();
     }
   }
 }