Methods : GetAvailableUndos, ChangeValue, FindOrCreateAttribute, SaveAs, GetAvailableRedos, Undo, FindComponent, Redo, FindAttribute, Open, CommitCommand, NewCommand


dir= os.getenv("TmpDir")
if dir == None:
        dir = "/tmp"

batchmode_geompy.myBuilder._set_UndoLimit(20)

# 1st transaction -----------------------------------------
batchmode_geompy.myBuilder.NewCommand()
#       create AttributeSequenceOfInteger      
#=========================================================
A = batchmode_geompy.myBuilder.FindOrCreateAttribute(batchmode_geompy.father, "AttributeSequenceOfInteger")
if A == None :
        raise  RuntimeError, "Can't create AttributeSequenceOfInteger attribute"
A = A._narrow(SALOMEDS.AttributeSequenceOfInteger)
if A == None :
        raise  RuntimeError, "Can't create AttributeSequenceOfInteger attribute"

A.Add(100)
A.Add(300)
A.Add(500)
A.Add(400)
A.Add(700)
print "First transaction goes on :  HasOpenCommand() = ", batchmode_geompy.myBuilder.HasOpenCommand()
batchmode_geompy.myBuilder.CommitCommand() #--------------

# 2nd transaction ------------------------------------------
batchmode_geompy.myBuilder.NewCommand() 
A.Remove(3)
A.ChangeValue(4,500)
batchmode_geompy.myBuilder.CommitCommand() #--------------

if batchmode_geompy.myBuilder.GetAvailableUndos() == 0:
        raise RuntimeError, "GetAvailableUndos() = 0 but must not !"

if A.Length() != 4:
        print "Wrong length of SequenceOfInteger"
if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 400 or A.Value(4) != 500:
        raise  RuntimeError, "Wrong  value of  AttributeSequenceOfInteger"

file1 = dir + "/test1.hdf"
batchmode_geompy.myStudyManager.SaveAs(file1, batchmode_geompy.myStudy)

# 1st Undo ---------------------------------------
batchmode_geompy.myBuilder.Undo()
res, A = batchmode_geompy.myBuilder.FindAttribute(batchmode_geompy.father, "AttributeSequenceOfInteger")
if A is None:
        raise  RuntimeError, "After first 'undo' can't find AttributeSequenceOfInteger"
if A.Length() != 5:
        print "Wrong length of SequenceOfInteger"
if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 500 or A.Value(4) != 400 or  A.Value(5) != 700:
        print  A.Value(1), A.Value(2), A.Value(3), A.Value(4), A.Value(5)
        raise  RuntimeError, "Wrong  value of  AttributeSequenceOfInteger after the first 'undo'!"
# save 
file2 = dir + "/test2.hdf"
batchmode_geompy.myStudyManager.SaveAs(file2, batchmode_geompy.myStudy)
#-------------------------------------------------
# 2nd Undo ---------------------------------------
batchmode_geompy.myBuilder.Undo()
res, attr = batchmode_geompy.myBuilder.FindAttribute(batchmode_geompy.father, "AttributeSequenceOfInteger")
if res !=0 or attr != None :
        raise  RuntimeError, "After the second 'undo' AttributeSequenceOfInteger exists but must not!"
file3 = dir + "/test3.hdf"
batchmode_geompy.myStudyManager.SaveAs(file3, batchmode_geompy.myStudy)
#-------------------------------------------------

#make redo twice ---------------------------------
if batchmode_geompy.myBuilder.GetAvailableRedos() == 0:
        raise RuntimeError, "GetAvailableRedos() = 0 but must not !"
batchmode_geompy.myBuilder.Redo()
batchmode_geompy.myBuilder.Redo()
res, A = batchmode_geompy.myBuilder.FindAttribute(batchmode_geompy.father, "AttributeSequenceOfInteger")
if res ==0 or A== None :
        raise  RuntimeError, "AttributeSequenceOfInteger is not found but must be!"
if A.Length() != 4:
        print "Wrong length of SequenceOfInteger"
if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 400 or A.Value(4) != 500:
        raise  RuntimeError, "Wrong  value of  AttributeSequenceOfInteger"


#----------------------------------------------------------------------
openedStudy=batchmode_geompy.myStudyManager.Open(file1);

if openedStudy == None:
        raise  RuntimeError, "Can't open saved study!"


father = openedStudy.FindComponent("GEOM")
if father is None:
         raise  RuntimeError, "Geom component is not found!  Wrong study is opened." 


#     find AttributeSequenceOfInteger
#======================================

res,A=father.FindAttribute("AttributeSequenceOfInteger")
if res == 0 or A == None:
        raise  RuntimeError, "Error:  not found AttributeSequenceOfInteger"

A = A._narrow(SALOMEDS.AttributeSequenceOfInteger)

if A.Length() != 4:
        print "Wrong length of SequenceOfInteger"
if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 400 or A.Value(4) != 500:
        print "Wrong  value of  AttributeSequenceOfInteger"
#----------------------------------------------------------------------
openedStudy=batchmode_geompy.myStudyManager.Open(file2);

if openedStudy == None:
        raise  RuntimeError, "Can't open saved study!"


father = openedStudy.FindComponent("GEOM")
if father is None:
         raise  RuntimeError, "Geom component is not found!  Wrong study is opened." 


#     find AttributeSequenceOfInteger
#======================================

res,A=father.FindAttribute("AttributeSequenceOfInteger")
if res == 0 or A == None:
        raise  RuntimeError, "Error:  not found AttributeSequenceOfInteger"

A = A._narrow(SALOMEDS.AttributeSequenceOfInteger)

if A.Length() != 5:
        print "Wrong length of SequenceOfInteger"
if A.Value(1) != 100 or A.Value(2) != 300 or A.Value(3) != 500 or A.Value(4) != 400 or  A.Value(5) != 700:
        raise  RuntimeError, "Wrong  value of  AttributeSequenceOfInteger after the first 'undo'!"

#----------------------------------------------------------------------
openedStudy=batchmode_geompy.myStudyManager.Open(file3);

if openedStudy == None:
        raise  RuntimeError, "Can't open saved study!"


father = openedStudy.FindComponent("GEOM")
if father is None:
         raise  RuntimeError, "Geom component is not found!  Wrong study is opened." 


#     find AttributeSequenceOfInteger
#======================================

res,A=father.FindAttribute("AttributeSequenceOfInteger")

if res!=0 or A != None:
        raise RuntimeError, " AttributeSequenceOfInteger is found but must not!"