Package nexj.core.runtime

Examples of nexj.core.runtime.InstanceList


   {
      UnitOfWork[] uowArray = new UnitOfWork[2];

      uowArray[0] = m_context.beginTransaction(false);

      InstanceList list =
         Query.createRead(getMetadata().getMetaclass("Contact"),
                          null, null, null, -1, 0, true, Query.SEC_NONE, m_context).read();

      try
      {
         uowArray[1] = m_context.beginTransaction(false);
         assertTrue(list.size() > 0); // need at least one to place lock on

         Query query = Query.createRead(getMetadata().getMetaclass("Contact"),
                                        null, Pair.attribute("").eq(list.get(0)),
                                        null, -1, 0, true, Query.SEC_NONE, m_context);

         query.setTimeout(1); // test applications specified query timeout
         query.read();
         fail(); // QueryTimeoutException expected
View Full Code Here


   public void testUpdate()
   {
      // Old value with removal

      InstanceList list = Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(firstName lastName (addresses type typeEnum city))"),
         parse("(and (= lastName \"Test\") (= firstName \"Joe\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(1, list.size());

      Instance contact = list.getInstance(0);

      assertEquals("Test", contact.getOldValue("lastName"));
      assertFalse(contact.isDirty("lastName"));
      assertEquals("Test", contact.getPreValue("lastName"));
      assertFalse(contact.isUpdated("lastName"));

      contact.setValue("lastName", "Best");

      assertEquals("Test", contact.getOldValue("lastName"));
      assertTrue(contact.isDirty("lastName"));
      assertEquals("Test", contact.getPreValue("lastName"));
      assertTrue(contact.isUpdated("lastName"));

      assertEquals("CON", contact.getOldValueDirect(contact.getMetaclass().getAttribute("classCode").getOrdinal()));

      contact.setValue("type", null);

      assertEquals("Joe Best {jtest}", contact.getValue("fullName"));
      assertEquals("Joe Test [Employee] {jtest}", contact.getOldValue("fullName"));
      assertFalse(contact.isDirty("fullName"));
      assertEquals("Joe Test [Employee] {jtest}", contact.getPreValue("fullName"));
      assertFalse(contact.isUpdated("fullName"));

      assertEquals(2, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertFalse(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertFalse(contact.isUpdated("addresses"));

      ((InstanceList)contact.getValue("addresses")).remove(0);

      assertEquals(1, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertTrue(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertTrue(contact.isUpdated("addresses"));

      Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(firstName lastName (addresses type typeEnum city))"),
         parse("(and (= lastName \"Test\") (= firstName \"Joe\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(1, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertTrue(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertTrue(contact.isUpdated("addresses"));

      contact.setValue("lastUpdated", new Timestamp(3));

      assertSame(Invalid.VALUE,
         contact.getValueDirect(contact.getMetaclass().getAttribute("lastUpdatedMillisecond").getOrdinal()));

      contact.invoke("update");

      assertEquals("Test", contact.getOldValue("lastName"));
      assertTrue(contact.isDirty("lastName"));
      assertEquals("Best", contact.getPreValue("lastName"));
      assertFalse(contact.isUpdated("lastName"));
      assertEquals("Joe Best {jtest}", contact.getValue("fullName"));
      assertEquals("Joe Test [Employee] {jtest}", contact.getOldValue("fullName"));
      assertFalse(contact.isDirty("fullName"));
      assertEquals("Joe Best {jtest}", contact.getPreValue("fullName"));
      assertFalse(contact.isUpdated("fullName"));
      assertEquals(1, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertTrue(contact.isDirty("addresses"));
      assertEquals(1, ((InstanceList)contact.getPreValue("addresses")).size());
      assertFalse(contact.isUpdated("addresses"));

      rollback();

      assertEquals(2, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertFalse(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertFalse(contact.isUpdated("addresses"));

      ((InstanceList)contact.getValue("addresses")).remove(0);

      assertEquals(1, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertTrue(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertTrue(contact.isUpdated("addresses"));

      Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(firstName lastName (addresses type typeEnum city))"),
         parse("(and (= lastName \"Test\") (= firstName \"Joe\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(1, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertTrue(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertTrue(contact.isUpdated("addresses"));

      rollback();

      assertEquals(2, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertFalse(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertFalse(contact.isUpdated("addresses"));

      assertEquals(2, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      ((InstanceList)contact.getValue("phones")).remove(0);

      assertEquals(1, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(phones)"),
         parse("(and (= lastName \"Test\") (= firstName \"Joe\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(1, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      rollback();

      assertEquals(2, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      ((InstanceList)contact.getValue("phones")).remove(0);

      assertEquals(1, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(phones)"),
         parse("(and (= lastName \"Test\") (= firstName \"Joe\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(1, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      rollback();
     
      assertEquals(2, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());
     
      reset();

      // Old value with adding
     
      list = Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(firstName lastName (addresses type typeEnum city))"),
         parse("(and (= lastName \"Test\") (= firstName \"Joe\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      contact = list.getInstance(0);

      assertEquals(2, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());

      Instance address = new Instance(getMetadata().getMetaclass("Address"), Instance.NEW, m_context);

      address.setValue("contact", contact);

      assertEquals(3, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertTrue(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertTrue(contact.isUpdated("addresses"));

      Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(firstName lastName (addresses type typeEnum city))"),
         parse("(and (= lastName \"Test\") (= firstName \"Joe\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(3, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertTrue(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertTrue(contact.isUpdated("addresses"));

      contact.invoke("update");

      assertEquals(3, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertTrue(contact.isDirty("addresses"));
      assertEquals(3, ((InstanceList)contact.getPreValue("addresses")).size());
      assertFalse(contact.isUpdated("addresses"));

      rollback();

      assertEquals(2, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertFalse(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertFalse(contact.isUpdated("addresses"));

      address = new Instance(getMetadata().getMetaclass("Address"), Instance.NEW, m_context);
      address.setValue("contact", contact);

      assertEquals(3, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertTrue(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertTrue(contact.isUpdated("addresses"));

      Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(firstName lastName (addresses type typeEnum city))"),
         parse("(and (= lastName \"Test\") (= firstName \"Joe\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(3, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertTrue(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertTrue(contact.isUpdated("addresses"));

      rollback();
     
      assertEquals(2, ((InstanceList)contact.getValue("addresses")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("addresses")).size());
      assertFalse(contact.isDirty("addresses"));
      assertEquals(2, ((InstanceList)contact.getPreValue("addresses")).size());
      assertFalse(contact.isUpdated("addresses"));

      assertEquals(2, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      ((InstanceList)contact.getValue("phones")).remove(0);

      assertEquals(1, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(phones)"),
         parse("(and (= lastName \"Test\") (= firstName \"Joe\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(1, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      rollback();

      assertEquals(2, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      Instance phone = new Instance(getMetadata().getMetaclass("Phone"), Instance.NEW, m_context);

      phone.setValue("contact", contact);

      assertEquals(3, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(phones)"),
         parse("(and (= lastName \"Test\") (= firstName \"Joe\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(3, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      rollback();

      assertEquals(2, ((InstanceList)contact.getValue("phones")).size());
      assertEquals(2, ((InstanceList)contact.getOldValue("phones")).size());

      reset();
     
      // Other tests
     
      list = Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(firstName lastName (addresses type typeEnum city))"),
         parse("(= lastName \"Test\")"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(2, list.size());
     
      Instance cottage = Query.createRead(getMetadata().getMetaclass("AddressType"),
         parse("(type)"), parse("(and (= type \"Cottage\") (= locale \"en\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read().getInstance(0);
     
      for (int i = 0; i < list.size(); ++i)
      {
         contact = list.getInstance(i);
         contact.setValue("lastName", "QA");

         InstanceList addrs = (InstanceList)contact.getValue("addresses");

         for (int k = 0; k < addrs.size(); ++k)
         {
            Instance addr = addrs.getInstance(k);

            if ("Home".equals(addr.getValue("type")))
            {
               addr.setValue("type", "Residence");
               contact.setValue("primaryAddress", addr);
View Full Code Here

   public void testDelete()
   {
      m_context.requireTransaction();

      InstanceList list = Query.createRead(getMetadata().getMetaclass("Contact"),
         parse("(firstName lastName)"),
         parse("(and (= firstName \"Joe\") (= lastName \"Test\"))"),
         null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(1, list.size());

      Instance instance = list.getInstance(0);

      list = (InstanceList)instance.getValue("addresses");
      instance.setDeleted();

      for (int i = 0; i < list.size(); ++i)
      {
         list.getInstance(i).setDeleted();
      }

      commit();

      assertEquals(Primitive.ZERO_INTEGER, m_context.getMachine().getGlobalEnvironment().getVariable(Symbol.define("update-count")));
      assertEquals(Primitive.ZERO_INTEGER, m_context.getMachine().getGlobalEnvironment().getVariable(Symbol.define("commit-count")));

      Pair attributes = parse("(firstName lastName (addresses country city street code) (user name))");
      Query query = Query.createRead(getMetadata().getMetaclass("Contact"),
         attributes, parse("(= classCode \"CON\")"),
         parse("((firstName . #t)(lastName . #t)((@ addresses) . #t))"),
         -1, 0, false, Query.SEC_NONE, m_context);
      AssertUtil.assertEquals(getURL("delete.xml"), query.read(), attributes);

      list = Query.createRead(getMetadata().getMetaclass("User"), parse("(ugassocs)"),
         parse("(= name \"jsmith\")"), null, -1, 0, false, Query.SEC_NONE, m_context).read();

      assertEquals(1, list.size());

      for (Iterator itr = ((InstanceList)list.getInstance(0).getValue("ugassocs")).iterator(); itr.hasNext();)
      {
         ((Instance)itr.next()).delete();
      }

      commit();
View Full Code Here

      Pair attributes = parse("(fullName (addresses type city))");
      Pair where = parse("(= classCode \"CON\")");
      Pair orderBy = parse("(((@) . #t)((@ addresses) . #t))");
      Query query = Query.createRead(getMetadata().getMetaclass("Contact"),
         attributes, where, orderBy, -1, 0, false, Query.SEC_NONE, m_context);
      InstanceList list = query.read();

      assertEquals(5, list.size());

      for (int i = 0; i != list.size(); ++i)
      {
         assertTrue(m_context.isLocked(list.getInstance(i)));
      }

      execute("upd_addr");

      Query.createRead(getMetadata().getMetaclass("Address"), parse("(contact type city)"),
         null, null, -1, 0, false, Query.SEC_NONE, m_context).read();
     
      AssertUtil.assertEquals(getURL("shlockUpdPes1.xml"), list, attributes);
     
      Query.createRead(getMetadata().getMetaclass("Contact"),
         attributes, where, orderBy, -1, 0, false, Query.SEC_NONE, m_context).read();

      InstanceList addresses = (InstanceList)list.getInstance(0).getValue("addresses");
     
      AssertUtil.assertEquals(getURL("shlockUpdPes2.xml"), list, attributes);
     
      execute("upd_cont");
     
View Full Code Here

            new Pair(Symbol.define("start"), Primitive.toTimestamp("2000-01-01 00:00:00")),
            new Pair(Symbol.define("end"), Primitive.toTimestamp("2000-02-01 00:00:00")),
            new Pair(Symbol.define("applicant"), m_context.getUser())
         });
      Metaclass workflowClass = getMetadata().getMetaclass(Metadata.WORKFLOW_CLASS_NAME);
      InstanceList workflowList = (InstanceList)workflowClass.invoke("forInstance",
         new Object[]{req});
     
      assertEquals(1, workflowList.size());
     
      commit();

      Pair attributes = parse("(name version class serializedState serializedVariables (assignments ordinal caption assignee manual (nextStates ordinal caption)) (timers ordinal))");
      Pair orderBy = parse("(((@ assignments ordinal) . #t) ((@ assignments nextStates ordinal) . #t))");
     
      m_context.setSecure(false);
      AssertUtil.assertEqualsIgnoreOIDs(getURL("workflow-HRA1.xml"),
         Query.createRead(workflowClass, attributes, null, orderBy,
            -1, 0, false, Query.SEC_NONE, m_context).read(), attributes);
      m_context.setSecure(true);

      req.setValue("approved", Boolean.TRUE);

      commit();

      m_context.setSecure(false);
      workflowList = Query.createRead(workflowClass, attributes, null, orderBy,
         -1, 0, false, Query.SEC_NONE, m_context).read();

      AssertUtil.assertEqualsIgnoreOIDs(getURL("workflow-HRA2.xml"), workflowList, attributes);
     
      Instance wfassignment = ((InstanceList)workflowList.getInstance(0).getValue("assignments")).getInstance(0);
     
      wfassignment.setValue("nextState", ((InstanceList)wfassignment.getValue("nextStates")).getInstance(0));
     
      wfassignment = ((InstanceList)workflowList.getInstance(0).getValue("assignments")).getInstance(1);;
      wfassignment.setValue("nextState", ((InstanceList)wfassignment.getValue("nextStates")).getInstance(0));
      m_context.setSecure(true);
     
      commit();
View Full Code Here

            new Pair(Symbol.define("end"), Primitive.toTimestamp("2000-02-01 00:00:00")),
            new Pair(Symbol.define("applicant"), m_context.getUser())
         });

      Metaclass workflowClass = getMetadata().getMetaclass(Metadata.WORKFLOW_CLASS_NAME);
      InstanceList workflowList = (InstanceList)workflowClass.invoke("forInstance",
         new Object[]{req});

      assertEquals(1, workflowList.size());

      m_context.setSecure(false);
     
      for (int i = workflowList.size() - 1; i >= 0; --i)
      {
         workflowList.getInstance(i).invoke("delete");
      }

      m_context.setSecure(true);

      workflowClass.invoke("start", new Object[]{req, "HolidayRequest_C", Boolean.FALSE});

      commit();

      Pair attributes = parse("(name version class serializedState serializedVariables (assignments ordinal caption assignee manual (nextStates ordinal caption)) (timers ordinal))");
      Pair orderBy = parse("(((@ assignments ordinal) . #t) ((@ assignments nextStates ordinal) . #t) ((@ timers ordinal) . #t))");

      m_context.setSecure(false);
      AssertUtil.assertEqualsIgnoreOIDs(getURL("workflow-HRC1.xml"),
         Query.createRead(workflowClass, attributes, null, orderBy,
            -1, 0, false, Query.SEC_NONE, m_context).read(), attributes);
      m_context.setSecure(true);

      req.setValue("approved", Boolean.TRUE);

      commit();

      m_context.setSecure(false);
      workflowList = Query.createRead(workflowClass, attributes, null, orderBy,
         -1, 0, false, Query.SEC_NONE, m_context).read();

      AssertUtil.assertEqualsIgnoreOIDs(getURL("workflow-HRC2.xml"), workflowList, attributes);
     
      Instance wfassignment = ((InstanceList)workflowList.getInstance(0).getValue("assignments")).getInstance(0);
     
      wfassignment.setValue("nextState", ((InstanceList)wfassignment.getValue("nextStates")).getInstance(0));
     
      wfassignment = ((InstanceList)workflowList.getInstance(0).getValue("assignments")).getInstance(1);;
      wfassignment.setValue("nextState", ((InstanceList)wfassignment.getValue("nextStates")).getInstance(0));
      m_context.setSecure(true);

      commit();
View Full Code Here

      contact.setValue("lastName", LAST_NAME);
      contact.setValue("readPrincipal", principal);
      contact.setValue("version", Primitive.ZERO_INTEGER);
      commit();

      InstanceList resultList;

      resultList = Query.createRead(getMetadata().getMetaclass("Contact"), null,
         parse("(= lastName \"" + LAST_NAME.charAt(0) + "\")"), null,
         -1, 0, false, Query.SEC_NONE, m_context).read();
      assertEquals(1, resultList.size());
      assertEquals(FIRST_NAME, resultList.getInstance(0).getValue("firstName"));

      resultList = Query.createRead(getMetadata().getMetaclass("Contact"), null,
         parse("(like? firstName \"" + FIRST_NAME.charAt(0) + "*\")"), null,
         -1, 0, false, Query.SEC_NONE, m_context).read();
      assertEquals(1, resultList.size());
      assertEquals(FIRST_NAME, resultList.getInstance(0).getValue("firstName"));
      assertEquals(LAST_NAME, resultList.getInstance(0).getValue("lastName"));

      resultList = Query.createRead(getMetadata().getMetaclass("Contact"), null,
         parse("(like? firstName \"*" + FIRST_NAME.charAt(0) + "*\")"), null,
         -1, 0, false, Query.SEC_NONE, m_context).read();
      assertEquals(1, resultList.size());
      assertEquals(FIRST_NAME, resultList.getInstance(0).getValue("firstName"));
      assertEquals(LAST_NAME, resultList.getInstance(0).getValue("lastName"));

      resultList = Query.createRead(getMetadata().getMetaclass("Contact"), null,
         parse("(like? firstName \"*" + FIRST_NAME.charAt(1) + "*\")"), null,
         -1, 0, false, Query.SEC_NONE, m_context).read();
      assertEquals(1, resultList.size());
      assertEquals(FIRST_NAME, resultList.getInstance(0).getValue("firstName"));
      assertEquals(LAST_NAME, resultList.getInstance(0).getValue("lastName"));
   }
View Full Code Here

   {
      return new JavaIntrinsicFunction()
      {
         public boolean invoke(int nArgCount, Machine machine)
         {
            InstanceList list = new InstanceArrayList(Math.max(8, nArgCount));
           
            for (int i = 0; i < nArgCount; ++i)
            {
               Object instance = machine.getArg(i, nArgCount);

               if (!(instance instanceof Instance))
               {
                  throw new TypeMismatchException(getSymbol());
               }

               list.add(instance);
            }

            machine.returnValue(list, nArgCount);

            return false;
View Full Code Here

         return;
      }

      if (obj instanceof InstanceList)
      {
         InstanceList list = (InstanceList)obj;

         for (int i = 0, nCount = list.size(); i < nCount; ++i)
         {
            addDependency(uow, work, list.get(i), identitySet);
         }
      }
   }
View Full Code Here

            }

            if (tobjList == null)
            {
               Pair attributes = getCachedAttributes();
               InstanceList instanceList = readUncached(attributes, null);
               int nCount = instanceList.size();

               tobjList = new ArrayList(nCount);

               for (int i = 0; i < nCount; ++i)
               {
                  tobjList.add(RPCUtil.transfer(instanceList.get(i), attributes, identityMap,
                     RPCUtil.TF_ALL | RPCUtil.TF_LAZY | RPCUtil.TF_OLD));
                  identityMap.clear();
               }

               instanceList = null;

               Lookup cacheMap = new HashTab(2);

               queryResult = new Pair(tobjList);

               if (classKey != queryKey)
               {
                  classResult = getCached(classKey);

                  if (classResult == null)
                  {
                     classResult = new Pair(null, new Object());
                     cacheMap.put(classKey, classResult);
                  }
               }

               if (classResult != null)
               {
                  queryResult.setTail(classResult.getTail());
               }
               else
               {
                  queryResult.setTail(new Object());
               }

               cacheMap.put(queryKey, queryResult);
               cache(cacheMap, tobjList);
               bMissed = true;
            }

            bInstanceCaching = tobjList.size() > 64 && isUnique();
         }

         if (bInstanceCaching)
         {
            TransferObject tobj = null;
            Object instanceKey = null;
            Pair instanceResult = null;
            Object oidKey = null;
            Pair oidResult = null;
            OID oid;

            if (m_oid != null)
            {
               oid = m_oid;
            }
            else
            {
               oidKey = Pair.list(Symbol._CLASS, m_metaclass.getSymbol(), toString(m_where));
               oidResult = getCached(oidKey);
               oid = (oidResult == null) ? null : (OID)oidResult.getHead();
            }

            if (oid != null)
            {
               instanceKey = Instance.getInstanceKey(m_metaclass, oid);
               instanceResult = getCached(instanceKey);

               if (bCached && instanceResult != null &&
                  (m_oid != null || ObjUtil.equal(instanceResult.getTail(), oidResult.getTail())))
               {
                  tobj = (TransferObject)instanceResult.getHead();
               }
            }

            if (tobj == null)
            {
               tobj = NULL_TO;

               if (tobjList == null)
               {
                  Pair attributes = getCachedAttributes();
                  InstanceList instanceList;

                  if (m_oid != null)
                  {
                     instanceList = readUncached(attributes, Pair.attribute("").eq(m_oid));
                  }
                  else
                  {
                     int nLimitSaved = m_nLimit;
                     int nOffsetSaved = m_nOffset;
                     int nMaxCountSaved = m_nMaxCount;
                     byte nCachedSaved = m_nCached;

                     m_nLimit = -1;
                     m_nOffset = 0;
                     setCached(false);

                     try
                     {
                        instanceList = m_adapter.read(this);
                     }
                     finally
                     {
                        m_nLimit = nLimitSaved;
                        m_nOffset = nOffsetSaved;
                        m_nMaxCount = nMaxCountSaved;
                        m_nCached = nCachedSaved;
                     }

                     bFiltered = true;

                     for (Iterator itr = getAssocIterator(ASSOC_QUERY); itr.hasNext();)
                     {
                        Query assoc = (Query)itr.next();

                        if (assoc.isJoin() && !assoc.isInverse() && !assoc.getAttribute().isLazy())
                        {
                           assoc.join();
                        }
                     }
                  }

                  if (!instanceList.isEmpty())
                  {
                     tobj = (TransferObject)RPCUtil.transfer(instanceList.get(0), attributes,
                        identityMap, RPCUtil.TF_ALL | RPCUtil.TF_LAZY | RPCUtil.TF_OLD);
                     identityMap.clear();
                     oid = tobj.getOID();
                  }

                  bMissed = true;
               }
               else
               {
                  if (m_oid != null)
                  {
                     for (int i = 0, n = tobjList.size(); i < n; ++i)
                     {
                        TransferObject cur = (TransferObject)tobjList.get(i);

                        if (m_oid.equals(cur.getOID()))
                        {
                           tobj = cur;

                           break;
                        }
                     }
                  }
                  else
                  {
                     for (int i = 0, n = tobjList.size(); i < n; ++i)
                     {
                        TransferObject cur = (TransferObject)tobjList.get(i);

                        m_instance = cur;

                        if (m_where == null || !Boolean.FALSE.equals(m_where.getValue()))
                        {
                           tobj = cur;

                           break;
                        }
                     }

                     bFiltered = true;
                  }
               }

               if (oid != null)
               {
                  if (instanceKey == null)
                  {
                     instanceKey = Instance.getInstanceKey(m_metaclass, oid);
                  }

                  Lookup cacheMap = new HashTab(2);

                  instanceResult = (m_oid != null) ? null : getCached(instanceKey);

                  if (instanceResult == null)
                  {
                     instanceResult = new Pair(tobj);

                     if (tobj != NULL_TO)
                     {
                        if (m_persistenceMapping.getLockingAttribute() != null)
                        {
                           instanceResult.setTail(tobj.findValue(m_persistenceMapping.getLockingAttribute().getName()));
                        }

                        if (instanceResult.getTail() == null)
                        {
                           instanceResult.setTail(new Object());
                        }
                     }

                     cacheMap.put(instanceKey, instanceResult);
                  }

                  if (m_oid == null)
                  {
                     cacheMap.put(oidKey, new Pair(oid, instanceResult.getTail()));
                  }

                  cache(cacheMap, tobj);
               }
            }
            else
            {
               bMissed = false;
            }

            if (tobj != NULL_TO)
            {
               tobjList = Collections.singletonList(tobj);
            }
            else
            {
               tobjList = Collections.EMPTY_LIST;
            }
         }

         int nOffset = 0;
         int nCount = tobjList.size();
         InstanceList instanceList = new InstanceArrayList(nCount);
         InstanceFactory factory = new InstanceFactory(identityMap, null, InstanceFactory.STATE, context);

         for (int i = 0; i < nCount && (m_nMaxCount < 0 || instanceList.size() < m_nMaxCount); ++i)
         {
            TransferObject tobj = (TransferObject)tobjList.get(i);

            m_instance = tobj;

            if (bFiltered || m_where == null || !Boolean.FALSE.equals(m_where.getValue()))
            {
               Instance instance = factory.instantiate(tobj);

               identityMap.clear();

               if (isJoin())
               {
                  join(instance, getAdapter().getOID(instance, m_childItem));
               }

               if (nOffset++ >= m_nOffset)
               {
                  instanceList.add(instance);
               }
            }
         }

         if (bCached && !bMissed && factory.isLockMismatch())
         {
            bCached = false;

            continue;
         }

         if (getOrderByCount() != 0 && instanceList.size() > 1)
         {
            instanceList.sort(this);
         }

         m_instance = null;

         return instanceList;
View Full Code Here

TOP

Related Classes of nexj.core.runtime.InstanceList

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.