Comments (12)
@k-alexandrovsky
Кирилл, можешь объяснить, почему ты именно так записываешь структуру модели для результатов?
Например, код модели:
$Results
Test_1 : watch_par Парикмахер_1.состояние_парикмахера
$End
В JSON структуре в ...Model.java
получаем:
...
.put
(
"results", new JSONArray()
.put
(
new JSONObject()
.put("name", "model_test_7.Test_1")
.put("type", "watch_par")
.put("value_type", "model_test_7.Парикмахеры.состояние_парикмахера_enum")
)
...
Здесь value_type
это model_test_7.Парикмахеры.состояние_парикмахера_enum
.
А в параметрах типа Парикмахеры
в структуре:
...
.put
(
"parameters", new JSONArray()
.put
(
new JSONObject()
.put("name", "состояние_парикмахера")
.put("type", "enum")
.put
(
"enums", new JSONArray()
.put("Свободен")
.put("Занят")
)
.put("enum_origin", "model_test_7.Парикмахеры.состояние_парикмахера")
.put("offset", 0)
)
...
Здесь type
это просто enum
и еще есть дополнительная информация в виде enum_origin
.
Мне непонятно, как мне добраться до информации о енуме из JSON-структуры результата (например, чтобы вывести его строкой в трассировке). Если бы мы в результате записывали enum_origin
, то всё было бы очевидно. А здесь мы пишем какую-то странную строчку, из которой, конечно, можно получить нужный enum_origin
, отбросив _enum
, но это выглядит ужасно костыльно.
from raox.
Пока что накостылил, как описал выше.
from raox.
Кстати, смержился с тобой, и модели вообще сыпятся на сериализации результатов типа enum.
Ты генеришь в Имя_результата.java
вот такие куски кода:
private model_test_7.Парикмахеры.состояние_парикмахера_enum minValue = model_test_7.Парикмахеры.состояние_парикмахера_enum.MAX_VALUE;
private model_test_7.Парикмахеры.состояние_парикмахера_enum maxValue = model_test_7.Парикмахеры.состояние_парикмахера_enum.MIN_VALUE;
...
if(value < minValue)
minValue = value;
if(value > maxValue)
maxValue = value;
...
storelessStats.next(Simulator.getTime(), value);
И это все сыпит ошибками, потому что для енумов (а у тебя тип там вообще model_test_7.Парикмахеры.состояние_парикмахера_enum
) такие методы и поля не определены.
Edit: и вообще у меня после мержа сыпятся exception'ы на сериализации. Много разных и странных. Ты пробовал на стандартной модели с временными ресурсами включить всю трассировку и прогнать?
Если подробнее, то dpt и образцы не ломаются, в результатах ломаются watch_par
с такими ошибками:
ru.bmstu.rk9.rdo.lib.json.JSONException: JSONObject["value_type"] not found.
at ru.bmstu.rk9.rdo.lib.json.JSONObject.get(JSONObject.java:478)
at ru.bmstu.rk9.rdo.lib.json.JSONObject.getString(JSONObject.java:659)
at ru.bmstu.rk9.rdo.lib.Statistics$WeightedStoreless.initFromDatabase(Statistics.java:156)
at model_test_7.Длина_очереди.calculate(Длина_очереди.java:117)
at ru.bmstu.rk9.rdo.ui.runtime.ExecutionHandler$2.run(ExecutionHandler.java:281)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Ресурсы ломаются где-то на сериализации:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at ru.bmstu.rk9.rdo.ui.runtime.ExecutionHandler$2.run(ExecutionHandler.java:260)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at ru.bmstu.rk9.rdo.lib.Database.addResourceEntry(Database.java:315)
at model_test_7.Образец_прихода_клиента.run(Образец_прихода_клиента.java:82)
at ru.bmstu.rk9.rdo.lib.Simulator.run(Simulator.java:177)
at rdo_model.Embedded.runSimulation(Embedded.java:45)
... 6 more
Завести тебе отдельно ишью на последний edit?
from raox.
Так, вот java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
это конечно жуткий косяк, я даже не понял, когда я это успел сломать. Это я сейчас починю. А что касается энумов, то в структуре результатов я просто забываю отрезать _enum
. И переделаю на ту же схему, что и у параметров ресурсов ()
from raox.
Так, вот java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
это, конечно, жуткий косяк, я даже не понял, когда я это успел сломать. Это я сейчас починю. А что касается энумов, то в структуре результатов я просто забываю отрезать _enum
. И вообще я тогда переделаю на ту же схему, что и у параметров ресурсов (с явным копированием энумов и указанием enum_origin
, это и правда удобно, как тем, кому интересно, откуда взялся энум, так и тем, кто просто хочет его литерал). А вот что касается падений в watch_par
и всяких minValue
, тут мы обратимся к справке:
http://www.rdostudio.com/help/help/rdo_lang_rus/html/rdo_obj/rdo_obj_pmd.htm
Странно, что у watch_par
не написано ничего, конечно, но вот у watch_value
watch_value <имя_типа> [NoCheck | <логическое_выражение>] <арифметическое_выражение>
арифметическое_выражение
Арифметическое выражение должно быть целого или вещественного типа.
Так что статистика для энумов уже будет новой фичей, и когда нибудь мы ее конечно же допилим. Там, в принципе, вполне очевидно, что должно быть - проценты нахождения параметра в каждом энуме, минимальная/максимальная длительность каждого состояния, и всякое такое. Можно будет строить красивые pie chart'ы. Но это потом, надо писать еще один модуль в Statistics.
from raox.
вот что касается падений в watch_par и всяких minValue , тут мы обратимся к справке:
Странно, тогда вообще что ли результатов типа enum
не должно быть в трассировке?
С другой стороны, что нам мешает наблюдать за параметром типа енум? Кажется вполне валидным желанием. Для них просто часть статистики не будет иметь смысла, ну и что.
Мне кажется, надо просто сделать несколько другой формат статистики для енумов и просто впилить возможность за ними наблюдать.
from raox.
Блин, не успел сделать апдейт прошлому сообщению, в общем, см. выше :)
from raox.
Угу, читаешь мысли. Вроде это не кажется сложным, можно будет и на праздниках сделать.
Я тогда свой коммит не буду ревертить.
from raox.
Я тогда свой коммит не буду ревертить.
Так, а если я изменю структуру результатов, костыль придется немного поправить.
Что нибудь в духе
if (valueTypeRaw == "enum")
Проще сделать amend тогда, мне кажется. Хотя костыль на энум неизбежен, просто можно будет сразу забрать имена энума.
from raox.
Ну можешь либо вмержить мои 4 коммита сейчас, либо я заново сделаю мерж и потом залью фикс отдельным коммитом. Если что там всего в одном файле конфликты и те несложные, я только импорты менял и убирал лишние "Tracer.
".
Иначе у нас будут несобирающиеся коммиты, это как-то неприятно.
from raox.
Так, я исправил падения. И даже накостылил красоту с enum_origin
. Можно проверить ее в структуре результата для get_value
. Сериализовываться это добро не будет, зато корректность можно глянуть в сгенерированном коде.
from raox.
Закрываем
from raox.
Related Issues (20)
- Исправить tab order в окне поиска по трассировке HOT 1
- Имплементация новой грамматики языка HOT 17
- Оптимизация окошка с деревом всех сериализуемых объектов HOT 1
- Выпилить из дерева паттерны всех типов HOT 1
- В режиме без анимации отображается начало трассировки HOT 1
- Документация по новой грамматике HOT 55
- Исправить конфигурацию сериализации ресурсов в новой грамматике HOT 13
- Исправить отображение трассировки под Windows
- Реорганизовать файлы проектов HOT 22
- Выбрасывать исключения вместо возврата null'ов в случае внутренних ошибок HOT 12
- Навести порядок в способах хранения структуры модели HOT 1
- Унифицировать схему нотификации гуи об изменениях в базе данных HOT 8
- Исправить схему добавления записей об изменении ресурсов в базу данных HOT 4
- Чистка кода в проекте кодогенерации HOT 10
- Убрать префикс `RDO` у всех классов проекта HOT 10
- Убрать копипасту в RDOSequenceCompiler.xtend HOT 1
- Использовать сторонние библиотеки как jar вместо копипасты исходного кода HOT 3
- Перейти на xbase HOT 1
- Планы на дипломный проект HOT 2
- У графиков не появляются ползунки прокрутки
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from raox.