Changeset 4412


Ignore:
Timestamp:
Feb 20, 2013, 12:34:10 PM (10 years ago)
Author:
olle
Message:

Refs #798. Refs #620. Refs #46. Classes/files action/write/EmptyTrash.java in client/servlet/ and plugins/EmptyTrashPlugin.java in plugin/ have been updated to hopefully avoid errors due to a proxy being associated with two open sessions. The updated routine has the following main steps:

  • DbControl object dc is used to create an ItemResultList<?> itemResultList from a database query. This is in turn used to create a List<BasicItem<?>> itemList of the items of interest.
  • DbControl object dc is closed, and List<BasicItem<?>> itemList is used to loop over the items.
  • For each item, DbControl object dc2 is created and used to get a new instance of the item from its database id. DbControl object dc2 is then used to delete the latter item, the change is committed, and DbControl object dc2 is closed.
  • DbControl object dc is created again, and used to generate a list of items still in the database, that is checked against the List<BasicItem<?>> itemList of items to delete.


Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/client/servlet/src/org/proteios/action/write/EmptyTrash.java

    r3956 r4412  
    2727 */
    2828package org.proteios.action.write;
     29
     30import java.util.ArrayList;
     31import java.util.List;
    2932
    3033import org.proteios.action.ProteiosAction;
     
    270273   * @return int The number of items of a specific class in the trash can.
    271274   */
    272   private <D extends BasicItem> int getNumberOfTrashItems(DbControl dc, Class<D> itemClass)
     275  private <D extends BasicItem<?>> int getNumberOfTrashItems(DbControl dc, Class<D> itemClass)
    273276  {
    274277    // Count items to be removed
     
    288291   * @return int The number of deleted items.
    289292   */
    290   private int deleteItemsOfSpecificClass(Class<? extends BasicItem> itemClass)
     293  private int deleteItemsOfSpecificClass(Class<? extends BasicItem<?>> itemClass)
    291294  {
    292295    log.debug("itemClass = " + itemClass);
     
    311314    filter(query);
    312315    dc = newDbControl();
    313     ItemResultList<?> itemList = query.list(dc);
    314     if (itemList != null)
    315     {
    316       log.debug(itemTypeCap + " itemList.size() = " + itemList.size());
     316    ItemResultList<?> itemResultList = query.list(dc);
     317    List<BasicItem<?>> itemList = new ArrayList<BasicItem<?>>();
     318    if (itemResultList != null)
     319    {
     320      log.debug(itemTypeCap + " itemResultList.size() = " + itemResultList.size());
     321      // Copy items from database to List<BasicItem<?>> list
     322      for (int i=0; i < itemResultList.size(); i++)
     323      {
     324        BasicItem<?> item = itemResultList.get(i);
     325        if (item != null)
     326        {
     327          itemList.add(item);
     328        }
     329      }
    317330    }
    318331    else
    319332    {
    320       log.debug(itemTypeCap + " itemList = null");
     333      log.debug(itemTypeCap + " itemResultList = null");
     334    }
     335    dc.close();
     336    for (int i=0; i < itemList.size(); i++)
     337    {
     338      if (itemList.get(i) != null)
     339      {
     340        //log.debug(itemTypeCap + "itemList.get(" + i + ").getClass().getSimpleName() = " + itemList.get(i).getClass().getSimpleName());
     341        int itemId = itemList.get(i).getId();
     342        String itemName = new String("unknown");
     343          if (Nameable.class.isAssignableFrom(itemList.get(i).getClass()))
     344          {
     345            Nameable nameable = (Nameable) itemList.get(i);
     346            itemName = nameable.getName();
     347          }
     348        else
     349        {
     350          log.debug("Nameable.class is not assignable from itemList.get(" + i + ") = " + itemList.get(i));
     351        }
     352        log.debug("Trying to delete " + itemTypeNonCap + " '" + itemName + "' id = " + itemList.get(i).getId());
     353        try
     354        {
     355          dc2 = newDbControl();
     356          ItemFactory itemFactory = new ItemFactory(dc2);
     357          log.debug("Trying to get item " + i + " with id = " + itemId);
     358          BasicItem<?> item = itemFactory.getById(itemClass, itemId);
     359          log.debug("Trying to delete item " + i + ": item = " + item);
     360          dc2.deleteItem(item);
     361          log.debug("Commiting deletion of item " + i + ": item = " + item);
     362          dc2.commit();
     363        }
     364        catch (Exception e)
     365        {
     366          log.debug("Exception when trying to delete " + itemTypeNonCap + " '" + itemName + " id = " + itemId + "' : " + e);
     367          String errorMsg = itemTypeCap + " '" + itemName + "' id = " + itemId + " : " + e;
     368          setErrorMessage(errorMsg);
     369        }
     370        dc2.close();
     371      }
     372    }
     373    // Check if some items could not be deleted
     374    dc = newDbControl();
     375    ItemResultList<?> itemListFinal = query.list(dc);
     376    if (itemListFinal != null)
     377    {
     378      log.debug(itemTypeCap + " itemListFinal.size() = " + itemListFinal.size());
     379    }
     380    else
     381    {
     382      log.debug(itemTypeCap + " itemListFinal = null");
    321383    }
    322384    for (int i=0; i < itemList.size(); i++)
     
    335397          log.debug("Nameable.class is not assignable from itemList.get(" + i + ") = " + itemList.get(i));
    336398        }
    337         log.debug("Trying to delete " + itemTypeNonCap + " '" + itemName + "' id = " + itemList.get(i).getId());
    338         try
    339         {
    340           itemList.get(i).getDbControl().detachItem(itemList.get(i));
    341           dc2 = newDbControl();
    342           dc2.reattachItem(itemList.get(i));
    343           dc2.deleteItem(itemList.get(i));
    344           dc2.commit();
    345         }
    346         catch (Exception e)
    347         {
    348           log.debug("Exception when trying to delete " + itemTypeNonCap + " '" + itemName + " id = " + itemList.get(i).getId() + "' : " + e);
    349           String errorMsg = itemTypeCap + " '" + itemName + "' id = " + itemList.get(i).getId() + " : " + e;
    350           setErrorMessage(errorMsg);
    351         }
    352         dc2.close();
    353       }
    354     }
    355     // Check if some items could not be deleted
    356     ItemResultList<?> itemListFinal = query.list(dc);
    357     if (itemListFinal != null)
    358     {
    359       log.debug(itemTypeCap + " itemListFinal.size() = " + itemListFinal.size());
    360     }
    361     else
    362     {
    363       log.debug(itemTypeCap + " itemListFinal = null");
    364     }
    365     for (int i=0; i < itemList.size(); i++)
    366     {
    367       if (itemList.get(i) != null)
    368       {
    369         //log.debug(itemTypeCap + "itemList.get(" + i + ").getClass().getSimpleName() = " + itemList.get(i).getClass().getSimpleName());
    370         String itemName = new String("unknown");
    371           if (Nameable.class.isAssignableFrom(itemList.get(i).getClass()))
    372           {
    373             Nameable nameable = (Nameable) itemList.get(i);
    374             itemName = nameable.getName();
    375           }
    376         else
    377         {
    378           log.debug("Nameable.class is not assignable from itemList.get(" + i + ") = " + itemList.get(i));
    379         }
    380399        if (!itemListFinal.contains(itemList.get(i)))
    381400        {
  • trunk/plugin/src/org/proteios/plugins/EmptyTrashPlugin.java

    r3956 r4412  
    2828package org.proteios.plugins;
    2929
     30import java.util.ArrayList;
     31import java.util.List;
     32
    3033import org.proteios.core.BaseException;
    3134import org.proteios.core.BasicItem;
     
    3437import org.proteios.core.File;
    3538import org.proteios.core.Include;
     39import org.proteios.core.ItemFactory;
    3640import org.proteios.core.ItemQuery;
    3741import org.proteios.core.ItemResultList;
     
    231235   * @return int The number of items of a specific class in the trash can.
    232236   */
    233   private <D extends BasicItem> int getNumberOfTrashItems(DbControl dc, Class<D> itemClass)
     237  private <D extends BasicItem<?>> int getNumberOfTrashItems(DbControl dc, Class<D> itemClass)
    234238  {
    235239    // Count items to be removed
     
    252256   * @return int The number of deleted items.
    253257   */
    254   private int deleteItemsOfSpecificClass(Class<? extends BasicItem> itemClass, ProgressReporter progress, int startCount, int totalCount)
     258  private int deleteItemsOfSpecificClass(Class<? extends BasicItem<?>> itemClass, ProgressReporter progress, int startCount, int totalCount)
    255259  {
    256260    log.debug("itemClass = " + itemClass);
     
    276280    filter(query);
    277281    dc = sc.newDbControl();
    278     ItemResultList<?> itemList = query.list(dc);
    279     if (itemList != null)
    280     {
    281       log.debug(itemTypeCap + " itemList.size() = " + itemList.size());
     282    ItemResultList<?> itemResultList = query.list(dc);
     283    List<BasicItem<?>> itemList = new ArrayList<BasicItem<?>>();
     284    if (itemResultList != null)
     285    {
     286      log.debug(itemTypeCap + " itemResultList.size() = " + itemResultList.size());
     287      // Copy items from database to List<BasicItem<?>> list
     288      for (int i=0; i < itemResultList.size(); i++)
     289      {
     290        BasicItem<?> item = itemResultList.get(i);
     291        if (item != null)
     292        {
     293          itemList.add(item);
     294        }
     295      }
    282296    }
    283297    else
    284298    {
    285       log.debug(itemTypeCap + " itemList = null");
     299      log.debug(itemTypeCap + " itemResultList = null");
     300    }
     301    dc.close();
     302    for (int i=0; i < itemList.size(); i++)
     303    {
     304      if (itemList.get(i) != null)
     305      {
     306        //log.debug(itemTypeCap + "itemList.get(" + i + ").getClass().getSimpleName() = " + itemList.get(i).getClass().getSimpleName());
     307        int itemId = itemList.get(i).getId();
     308        String itemName = new String("unknown");
     309          if (Nameable.class.isAssignableFrom(itemList.get(i).getClass()))
     310          {
     311            Nameable nameable = (Nameable) itemList.get(i);
     312            itemName = nameable.getName();
     313          }
     314        else
     315        {
     316          log.debug("Nameable.class is not assignable from itemList.get(" + i + ") = " + itemList.get(i));
     317        }
     318        log.debug("Trying to delete " + itemTypeNonCap + " '" + itemName + "' id = " + itemList.get(i).getId());
     319        try
     320        {
     321          dc2 = sc.newDbControl();
     322          ItemFactory itemFactory = new ItemFactory(dc2);
     323          log.debug("Trying to get item " + i + " with id = " + itemId);
     324          BasicItem<?> item = itemFactory.getById(itemClass, itemId);
     325          log.debug("Trying to delete item " + i + ": item = " + item);
     326          dc2.deleteItem(item);
     327          log.debug("Commiting deletion of item " + i + ": item = " + item);
     328          dc2.commit();
     329        }
     330        catch (Exception e)
     331        {
     332          log.debug("Exception when trying to delete " + itemTypeNonCap + " '" + itemName + " id = " + itemId + "' : " + e);
     333          String errorMsg = itemTypeCap + " '" + itemName + "' id = " + itemId + " : " + e;
     334          setErrorMessage(errorMsg);
     335        }
     336        dc2.close();
     337      }
     338      // Report progress
     339      if (progress != null && totalCount > 0)
     340      {
     341        int percentComplete = 100 * (startCount + i + 1)/totalCount;
     342        String progressMessage = new String("Item " + (startCount + i + 1) + " of " + totalCount);
     343        progress.display(percentComplete, progressMessage);
     344        log.debug("percentComplete = " + percentComplete + " progressMessage = \"" + progressMessage + "\"");
     345      }
     346    }
     347    // Check if some items could not be deleted
     348    dc = sc.newDbControl();
     349    ItemResultList<?> itemListFinal = query.list(dc);
     350    if (itemListFinal != null)
     351    {
     352      log.debug(itemTypeCap + " itemListFinal.size() = " + itemListFinal.size());
     353    }
     354    else
     355    {
     356      log.debug(itemTypeCap + " itemListFinal = null");
    286357    }
    287358    for (int i=0; i < itemList.size(); i++)
     
    300371          log.debug("Nameable.class is not assignable from itemList.get(" + i + ") = " + itemList.get(i));
    301372        }
    302         log.debug("Trying to delete " + itemTypeNonCap + " '" + itemName + "' id = " + itemList.get(i).getId());
    303         try
    304         {
    305           itemList.get(i).getDbControl().detachItem(itemList.get(i));
    306           dc2 = sc.newDbControl();
    307           dc2.reattachItem(itemList.get(i));
    308           dc2.deleteItem(itemList.get(i));
    309           dc2.commit();
    310         }
    311         catch (Exception e)
    312         {
    313           log.debug("Exception when trying to delete " + itemTypeNonCap + " '" + itemName + " id = " + itemList.get(i).getId() + "' : " + e);
    314           String errorMsg = itemTypeCap + " '" + itemName + "' id = " + itemList.get(i).getId() + " : " + e;
    315           setErrorMessage(errorMsg);
    316         }
    317         dc2.close();
    318       }
    319       // Report progress
    320       if (progress != null && totalCount > 0)
    321       {
    322         int percentComplete = 100 * (startCount + i + 1)/totalCount;
    323         String progressMessage = new String("Item " + (startCount + i + 1) + " of " + totalCount);
    324         progress.display(percentComplete, progressMessage);
    325         log.debug("precentComplete = " + percentComplete + " progressMessage = \"" + progressMessage + "\"");
    326       }
    327     }
    328     // Check if some items could not be deleted
    329     ItemResultList<?> itemListFinal = query.list(dc);
    330     if (itemListFinal != null)
    331     {
    332       log.debug(itemTypeCap + " itemListFinal.size() = " + itemListFinal.size());
    333     }
    334     else
    335     {
    336       log.debug(itemTypeCap + " itemListFinal = null");
    337     }
    338     for (int i=0; i < itemList.size(); i++)
    339     {
    340       if (itemList.get(i) != null)
    341       {
    342         //log.debug(itemTypeCap + "itemList.get(" + i + ").getClass().getSimpleName() = " + itemList.get(i).getClass().getSimpleName());
    343         String itemName = new String("unknown");
    344           if (Nameable.class.isAssignableFrom(itemList.get(i).getClass()))
    345           {
    346             Nameable nameable = (Nameable) itemList.get(i);
    347             itemName = nameable.getName();
    348           }
    349         else
    350         {
    351           log.debug("Nameable.class is not assignable from itemList.get(" + i + ") = " + itemList.get(i));
    352         }
    353373        if (!itemListFinal.contains(itemList.get(i)))
    354374        {
Note: See TracChangeset for help on using the changeset viewer.