Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. # Question: what does isAvailable() mean in case of multiple consumers. Do all consumers need to have the same time(s)?
    1. Leave in for now, review after more implementation, one suggestion of modification bool isAvailable(whosAsking);
    2. Will be discussed later during the meeting, Stef will show an example of using isAvailable(whosAsking);
  2. Question: Collection or Set instead of List for (In|Out)putExchangeItems in LC?
    1. It will be ICollection (thumbs up).
  3. Question: Introduce IState instead of Object? This will emphasize the relation between IManageState and IPersistentState. Additional suggestion: IPersistentState extends IState.
    (b.t.w: makePersistent / readPersistentState are wrong names, should be something like getAsByteStream)
    1. Gena has discussed with Rob between last and current meeting. After some discussion the final result (thumbs up) is described on: Suggestion about changed to state management
  4. To be discussed: Introduce generics in IOutputItem.Values()? i.e. weakly typed via <T>
    1. (thumbs down) We will not introduce generics in the standard. However, they could be used in the SDK.
  5. Remark: Working with providers/consumers, we should take care that such a circularity might give garbage collection problems. After a short discussion, we see no real general way so solve this risk, so it has been decided that we should leave this up to the Garbage Collector. Implementing IDisposable and removing item from Provider/Consumers there might solve the problem
    • Point noted, no specific agreement as to solution
  6. (thumbs up) We will introduce something like OpenMIException : Exception. However, first we will have a detailed look at the guidelines for introducing custom exceptions in both .Net and Java.

...

  • Move IsAvailable to IExchangeItem. Is it only for a thread-safety? If yes than see also ICollection.IsSynchronized

    Stef: The question is confusing, the actual issue is that we should distinguish between IsAvailable and IsValid.
    We are now realized that there is a difference between IsAvailable (only for output item, means it is for consumers) IsValid (probably for IExchangeItem, meaning if item is valid in the context of current component, maybe updated during Validate() call)?

  • Move Values { get; set; } to IExchangeItem

    Stef: alternative would be to add get to the IInputExchangeItem

    • (thumbs up) get; has been accepted,
    • set review later; to be reviewed at this meeting

      When discussing get/set, the subject of the discussion graduallly moved to the pull versus loop driven approach. This led to an important decision (thumbs up): We will introduce a boolean argument that indicates whether the component should run in a pull mode (like in OpenMI 1.4) or in loop mode

  • Change ID to Id - .NET Style Guidelines, FxCop
  • Wiki Markup
    Add *params* keyword to IArguments\[\] args parameter in Initialize(IArgument\[\] args).
    •  Adrian review, if happy then ... (question)(thumbs up)
  • Change "string Validate()" to "bool IsValid(IExchangeItem item)"

    Gena: probably the second one is not needed if we will have IsValid in IExchangeItem.
    string return type in the Validate() has to be changed to void.

    • Requires review after more experiance with implementing standard
  • Wiki Markup
    Add "params IExchangeItem\[\] items" argument to Update() in order to specify explicitly what should be updated.
    • as IOutputItem, maybe later generalise to IExchangeItem i.e. allow IInputItem
  • Remove AddConsumer/RemoveConsumer and use BindingList in the implementation instead to listen to IOutputItem.Consumer.Add() / Remove()
    • Not critical yet, so leave for now, review again later
  • Temporal ==(rename)==> TimeSet and add Durations, TimeZone properties to it (see also changes from Rob in Java version)
    • (thumbs up) Rename
    • Requires discussion in lator meetings
  • When we get loops in the compositions - we have to tell which component will be first! (WHAT SHOULD WE DO IN THIS SITUATAION?) Relevant when implementing the Runner process in GUI
  • Replace all ITime, ITimeStamp, ITimeSpan by: System.DateTime, System.TimeSpan. Should be straightforward. For components working in Julian only time in FORTRAN CalendarConverter can be used. But for .NET all nice features of the .NET date time, time span will be available, e.g. DateTime.AddDays(int), DateTime.AddHours(int), time1 > time2, time1.AddDays(1) > DateTime.Now, and so on.
    Seems to be very straightforward and simple to implement.**
    •  
  • Change XYPoint+XYZPoint, ZYPolyline+XYZPolyline => Point, Polyline (make it look more like OGC entities)
    • Review OGC methods to see how we know when a Z coordinate exists?
  • Split IIdentity into class IIdentifiable { long Id { get; set; } } and class IDescribable { string Caption { get; set; } string Description { get; set; } }
    • (thumbs up) Splitting interfaces
    • Make various interfaces derive from IIdentifiable, to review
  • Do we need a TimeHorizon in the ILinkableComponent ? Seems to be useless since we have ITemporal
  • IArgument needs a mechanism for identifying the type of argument e.g. File, Path, int double etc Very usful for providing customised GUI functionality
    • Adrian to come up with proposal for next meeting
  • Using empty Temporal and ElementSet in the Input items
  • Changing of the ElementSet during the time and different Times (steps) for different Elements
    • For the Time can be probably solved by missing values

...