Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
Час от часу не легче) прилетела задача сделать класс по подобию грувовского только на джаве

вот сам код

OperationContext context = CONTEXT;
byte[] fileData = (byte[]) context.getProperties().getObjectRaise("FILEDATA");

Template[] templates = new ObjectMapper().readValue(fileData, Template[].class)
def dic = Context.newDictionary("doc_maker/doc/isimple_template")

templates.each { Template item ->
	IDataItemModel record = dic.getNewDataRecord()
	record.set("GROUP", item.getGroup())
	record.set("ORDER", item.getOrder())
	record.set("DOC_VERSION", item.getDocVersion())
	record.set("DOC_KIND", item.getDocKind())
	record.set("DOC_OWNER_TYPE", item.getDocOwnerType())
	record.set("DOC_TITLE", item.getDocTitle())
	record.set("ROLES", item.getRoles())
	record.set("DOC_INFO", item.getDocInfo())
	record.set("SEND_DOC", item.isSendDoc())
	record.set("SEND_TYPE", item.getSendType())
	record.set("SEND_SP_NAME", item.getSendSpName())
	record.set("SEND_SP_FIELDS", item.getSendSpFields())
	record.set("CHECK_DOC", item.isCheckDoc())
	record.set("CHECK_TYPE", item.getCheckType())
	record.set("CHECK_SP_NAME", item.getCheckSpName())
	record.set("CHECK_SP_FIELDS", item.getCheckSpFields())
	record.set("CANCEL_DOC", item.isCancelDoc())
	record.set("CANCEL_TYPE", item.getCancelType())
	record.set("CANCEL_SP_NAME", item.getCancelSpName())
	record.set("CANCEL_SP_FIELDS", item.getCancelSpFields())
	record.set("IS_CONFIRM", item.isConfirm())
	IDictionary fieldGroups = record.get("FIELD_GROUP")
	for (FieldsGroup group : item.getFieldGroup()) {
		def newGroup = fieldGroups.getNewDataRecord()
		newGroup.set("ORDER", group.getOrder())
		newGroup.set("NAME", group.getName())
		newGroup.set("NAME_ID", group.getNameId())
		newGroup.set("DESCRIPTION", group.getDescription())
		newGroup.set("COUNT", group.getCount())

		IDictionary fields = newGroup.get("FIELDS")
		for (Field field : group.getFields()) {
			def newField = fields.getNewDataRecord()
			newField.set("GROUP_CODE", field.getGroupCode())
			newField.set("FIELD_ORDER", field.getOrder())
			newField.set("FIELD_NAME", field.getName())
			newField.set("FIELD_NAME_ID", field.getNameId())
			newField.set("DESCRIPTION", field.getDescription())
			newField.set("TOOLTIP", field.getTooltip())
			newField.set("FIELD_TYPE", field.getType())
			newField.set("FIELD_TYPE_PROPERTIES", field.getTypeProperties())
			newField.set("FIELD_MANDATORY", field.isMandatory())
			newField.set("FIELD_MANDATORY_EXPRESSION", field.getMandatoryExpression())
			newField.set("FIELD_VISIBLE", field.isVisible())
			newField.set("FIELD_VISIBLE_EXPRESSION", field.getVisibleExpression())
			newField.set("FIELD_READONLY", field.isReadonly())
			newField.set("FIELD_READONLY_EXPRESSION", field.getReadonlyExpression())
			newField.set("COMPONENT_WIDTH", field.getComponentWidth())
			newField.set("DEFAULT_VALUE", field.getDefaultValue())
		}
	}
}
dic.post()


Сообщение было отредактировано: 22 июл 20, 15:30
22 июл 20, 15:32    [22171776]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
и сразу же первый вопрос что за первая строчка такая?
откуда она берет этот контекст?
в самом коде правая часть подчеркнута точками и серая
но уже далее по коду видно что из этого контекста дастаются данные
22 июл 20, 15:34    [22171779]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
может это тоже самое что в java вот такая конструкция?

public class Export {

	private final OperationContext context;

	public Export(OperationContext context) {
		this.context = context;
	}
}
22 июл 20, 16:07    [22171828]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
А хрен ево знает. Без dependencies, imports неясно.
22 июл 20, 16:15    [22171832]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
mayton
А хрен ево знает. Без dependencies, imports неясно.

в импортах ничего такого нет

вот они
import com.custsystems.custerp.dictionary.IDictionary
import com.custsystems.custerp.dictionary.dictionaryStorage.IDataItemModel
import com.custsystems.custerp.docflow.operations.OperationContext
import com.custsystems.custtools.binding.IReaderBinding
import com.custsystems.dictionary.docMaker.template.load.export.Field
import com.custsystems.dictionary.docMaker.template.load.export.FieldsGroup
import com.custsystems.dictionary.docMaker.template.load.export.Template
import com.fasterxml.jackson.databind.ObjectMapper
import org.zkoss.zul.Filedownload
22 июл 20, 16:27    [22171841]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
SpringMan
Member

Откуда:
Сообщений: 207
Обычно, когда скрипт стартуют, в него передают какие-то параметры. Эти параметры в грувискриптах можно сразу использовать как переменные. Смотри как скрипт стартует из java-ы(?), и ищи чему там равно CONTEXT

Сообщение было отредактировано: 22 июл 20, 16:31
22 июл 20, 16:31    [22171844]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
Вот эта zkoss.zul штука похоже имет отношение к https://www.zkoss.org/wiki/ZUML Reference/ZUML
описателю юзерских интерфейсов на XML.

Ну fasterxml это понятно. Всем известная технология.

А это что непонятно com.custsystems. Проприетарное.

По внешнему виду это идет трансформация одного документа в другой. Но я тебе советую сначала покрыть
тестами то что надо сделать и потом реализовывать. Это реально секономит время в будущем.
22 июл 20, 16:36    [22171847]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
Что тут можно сделать. Можно взять beanUtils и конвертер из camelCase <-> DASH_STYLE
и попробовать пройтись по всем полям и сделать такие трансформации

record.set("DOC_TITLE", item.getDocTitle())


одиним циклом.

Если получится - код будет красивее чем в Groovy.
22 июл 20, 16:43    [22171850]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
SpringMan
Обычно, когда скрипт стартуют, в него передают какие-то параметры. Эти параметры в грувискриптах можно сразу использовать как переменные. Смотри как скрипт стартует из java-ы(?), и ищи чему там равно CONTEXT

ничего не понял от слова совсем
какой скрипт ?
где смотреть откуда он стартует и как?

это обычный класс в проекте зачем то написаный на груви,находится он в пакете ресурсов и дергается из xml схемы самописным фреймворком на подобии спринга......

вопрос то звучал не в этом ,а что обычно так объявляется в груви?

я так понимаю это скорей всего так выгляит тоже самое что и аргумент конструктора в джава

а откуда и куда дергается- мне без надобности
22 июл 20, 16:48    [22171856]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
mayton,просто нужно понять что так обычно обьявляется в груви классах

не зачем оно и что делает- а именно сама конструкция такая что значит?
в джава такого нет вот я и спрашиваю
22 июл 20, 16:50    [22171857]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
Ты пытаешся охватить необъятное. Нельзя будет ни в java ни в любом языке описать все-все сразу.

Вот у тебя в конце идет dic.post(). Это похоже что рест-клиент что-то куда-то постит. Но это отдельная логика.
Другая. Просто груви кодер был туп и не знал как декомпозировать сложную логику на составляющие.
Не делай java код пока. Сделай просто декомпозицию тупого кода на набор процедур по 2-5 строк. По Фаулеру.
И покрой тестами как я говорил. И после этого принимайся за адаптации.
22 июл 20, 16:55    [22171861]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
SpringMan
Member

Откуда:
Сообщений: 207
Zzz79
SpringMan
Обычно, когда скрипт стартуют, в него передают какие-то параметры. Эти параметры в грувискриптах можно сразу использовать как переменные. Смотри как скрипт стартует из java-ы(?), и ищи чему там равно CONTEXT

ничего не понял от слова совсем
какой скрипт ?
где смотреть откуда он стартует и как?

это обычный класс в проекте зачем то написаный на груви,находится он в пакете ресурсов и дергается из xml схемы самописным фреймворком на подобии спринга......

вопрос то звучал не в этом ,а что обычно так объявляется в груви?

я так понимаю это скорей всего так выгляит тоже самое что и аргумент конструктора в джава

а откуда и куда дергается- мне без надобности

Ключевое КАК запускается этот код? Когда кусок груви запускается из джавы, то технически это выглядит так:
Map<String, String> parameters = new HashMap<>();
parameters.put("CONTEXT", new OperationContext(...));
runGroovyScript("path/script.groovy", parameters);

Вот надо понять как этот groovy код запускается, тогда будет понятно, кто и чем заполняет этот CONTEXT.
Это не camel случайно? - Там в груви прокидывались несколько всяких контекстов

Сообщение было отредактировано: 22 июл 20, 17:03
22 июл 20, 17:02    [22171862]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
SpringMan
Zzz79
пропущено...

ничего не понял от слова совсем
какой скрипт ?
где смотреть откуда он стартует и как?

это обычный класс в проекте зачем то написаный на груви,находится он в пакете ресурсов и дергается из xml схемы самописным фреймворком на подобии спринга......

вопрос то звучал не в этом ,а что обычно так объявляется в груви?

я так понимаю это скорей всего так выгляит тоже самое что и аргумент конструктора в джава

а откуда и куда дергается- мне без надобности

Ключевое КАК запускается этот код? Когда кусок груви запускается из джавы, то технически это выглядит так:
Map<String, String> parameters = new HashMap<>();
parameters.put("CONTEXT", new OperationContext(...));
runGroovyScript("path/script.groovy", parameters);

Вот надо понять как этот groovy код запускается, тогда будет понятно, кто и чем заполняет этот CONTEXT.
Это не camel случайно? - Там в груви прокидывались несколько всяких контекстов

запускается он вот отсюда
<?xml version="1.0" encoding="UTF-8"?>
<SCHEMA xmlns="http://www.custsystems.com/2009/plugins"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.custsystems.com/2009/plugins /WEB-INF/metadata/xsd/custerp.xsd">

	<PROPERTIES>
		<PROPERTIES NAME="PARENT_SCHEMA">
			<PROPERTY NAME="LOCATOR" VALUE="/dictionary/ibank/dic/schema/admin"/>
		</PROPERTIES>
	</PROPERTIES>

	<STATUS NAME="empty">
		<ACTION NAME="create">
			<OPERATION CLASS_REF="CONTROL">
				<PROPERTIES>
					<PROPERTY NAME="CONTROL_NAME" VALUE="NEW"/>
				</PROPERTIES>
			</OPERATION>
		</ACTION>
		<ACTION NAME="copy">
			<OPERATION CLASS_REF="CONTROL">
				<PROPERTIES>
					<PROPERTY NAME="CONTROL_NAME" VALUE="NEW"/>
				</PROPERTIES>
			</OPERATION>
		</ACTION>
		<ACTION NAME="export" ROLES="ROLE_ADMIN;ROLE_BANKUL_ADMIN;ROLE_BANKFL_ADMIN" SHOW_ORDER="-1">
			<PROPERTIES>
				<PROPERTY NAME="CAPTION" LVALUE="ACTIONS/EXPORT"/>
				<PROPERTIES NAME="CUSTERP_ACTION">
					<PROPERTY NAME="CLASS_REF" VALUE="DC_ACTION"/>
					<PROPERTY NAME="NEED_RECORD" VALUE="true"/>
					<PROPERTY NAME="IMAGE" IMAGE_REF="CERT/CERT"/>
					<PROPERTIES NAME="QUESTION">
						<PROPERTY NAME="TITLE" LVALUE="QUESTION/export/TITLE"/>
						<PROPERTY NAME="MESSAGE" LVALUE="QUESTION/export/MESSAGE"/>
					</PROPERTIES>
				</PROPERTIES>
			</PROPERTIES>
			<OPERATION CLASS_REF="SCRIPT">
				<PROPERTIES>
					<PROPERTY NAME="SCRIPT_LOCATOR" VALUE="./load/export/export.groovy"/>
				</PROPERTIES>
			</OPERATION>
		</ACTION>
		<ACTION NAME="import" ROLES="ROLE_ADMIN;ROLE_BANKUL_ADMIN;ROLE_BANKFL_ADMIN" SHOW_ORDER="-1">
			<PROPERTIES>
				<PROPERTY NAME="CAPTION" LVALUE="ACTIONS/IMPORT"/>
				<PROPERTIES NAME="CUSTERP_ACTION">
					<PROPERTY NAME="CLASS_REF" VALUE="DC_ACTION"/>
					<PROPERTY NAME="NEED_RECORD" VALUE="false"/>
					<PROPERTY NAME="IMAGE" IMAGE_REF="CERT/CERT"/>
					<PROPERTIES NAME="QUESTION">
						<PROPERTY NAME="TITLE" LVALUE="QUESTION/import/TITLE"/>
						<PROPERTY NAME="MESSAGE" LVALUE="QUESTION/import/MESSAGE"/>
						<PROPERTIES NAME="ITEM_MODEL">
							<PROPERTY NAME="DICTIONARY_LOCATOR" VALUE="./import"/>
							<PROPERTY NAME="WIDGET" VALUE="IMPORT"/>
							<PROPERTY NAME="ROWS" VALUE="3"/>
						</PROPERTIES>
					</PROPERTIES>
				</PROPERTIES>
			</PROPERTIES>
			<OPERATION CLASS_REF="SCRIPT">
				<PROPERTIES>
					<PROPERTY NAME="SCRIPT_LOCATOR" VALUE="./load/import/import.groovy"/>
				</PROPERTIES>
			</OPERATION>
		</ACTION>
	</STATUS>

	<STATUS NAME="new">
		<ACTION NAME="update">
			<OPERATION CLASS_REF="CONTROL">
				<PROPERTIES>
					<PROPERTY NAME="CONTROL_NAME" VALUE="NEW"/>
				</PROPERTIES>
			</OPERATION>
		</ACTION>
	</STATUS>

</SCHEMA>
22 июл 20, 17:09    [22171867]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
mayton
Ты пытаешся охватить необъятное. Нельзя будет ни в java ни в любом языке описать все-все сразу.

Вот у тебя в конце идет dic.post(). Это похоже что рест-клиент что-то куда-то постит. Но это отдельная логика.
Другая. Просто груви кодер был туп и не знал как декомпозировать сложную логику на составляющие.
Не делай java код пока. Сделай просто декомпозицию тупого кода на набор процедур по 2-5 строк. По Фаулеру.
И покрой тестами как я говорил. И после этого принимайся за адаптации.


пост это вот что
@Override
	public void post(Connection connection) {
		getRecordSet().post(connection);
	}
22 июл 20, 17:12    [22171868]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
SpringMan
Member

Откуда:
Сообщений: 207
Zzz79

<?xml version="1.0" encoding="UTF-8"?>
<SCHEMA xmlns="http://www.custsystems.com/2009/plugins"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
...

Ну тебе уже без кода никто не скажет, что в этом контексте - суть в том, что он приходит из ВНЕ. Смотри где эта xml-ка используется, где создается/заполняется/используется OperationContext по коду вне скрипта.
22 июл 20, 17:17    [22171870]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
разбираться тут можно годами - это самописный фреймворк,который писали я так понимаю еще в 2007-2009 годах,когда никто и слыхом не слыхивал про принципы солид и все такое)

но суть не в этом- я вот не пойму тут же не спроста груви использовали,так как это по сути самоисполняемый скрипт конечная цель которого вот тут вызвать метотд post и вбить туда что надо

а как я такого с java проверну?мне же нажо чтобы xml не просто класс дернул ( как в случае с груви) а конкретный метод

в конструктор чтоли этот метод прописать типо вот такого
public Export(OperationContext context) {
		this.context = context;
		dic.post();
	}
22 июл 20, 17:18    [22171871]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
SpringMan
Zzz79

<?xml version="1.0" encoding="UTF-8"?>
<SCHEMA xmlns="http://www.custsystems.com/2009/plugins"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
...

Ну тебе уже без кода никто не скажет, что в этом контексте - суть в том, что он приходит из ВНЕ. Смотри где эта xml-ка используется, где создается/заполняется/используется OperationContext по коду вне скрипта.

понятно что он приходит из вне

ты мне скажи когда в груви пишут
OperationContext context = CONTEXT;

что это значит?что контекст прилетает наподобии аргумента в конструктор класса?
я так понял у груви нет конструкторов ,да и класса похоже тоже нет
22 июл 20, 17:20    [22171874]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
SpringMan
Member

Откуда:
Сообщений: 207
Zzz79,

Это ровно тоже самое что и в джаве. Создаем переменную, которая ссылка на CONTEXT. Так скорее всего написали, чтобы ide знала тип context, у CONTEXT ide не может понять тип и везде бы его подчеркивала. И конструкторы и классы там есть, просто можно писать все компактнее

Сообщение было отредактировано: 22 июл 20, 17:25
22 июл 20, 17:27    [22171878]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
SpringMan
Zzz79,

Это ровно тоже самое что и в джаве. Создаем переменную, которая ссылка на CONTEXT. Так скорее всего написали, чтобы ide знала тип context, у CONTEXT ide не может понять тип и везде бы его подчеркивала. И конструкторы и классы там есть, просто можно писать все компактнее

можешь на примере написать равнозначное выражение этому

у меня сейчас вот так но я не уверен что это идентично грувовскому из этого кода,так как CONTEXT это какой то указатель на что то судя по всему

public class Export {

	private final OperationContext context;

	public Export(OperationContext context) {
		this.context = context;
		sss();
	}
22 июл 20, 17:32    [22171881]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
в методе sss я вызываю конечный код скрипта груви dic.post()
22 июл 20, 17:33    [22171884]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
SpringMan
Member

Откуда:
Сообщений: 207
Zzz79,

Не понимаю, что конкретно надо. В груви можно так. Перед тобой обычный груви-скрипт, который просто делает логику. Это даже не класс, а просто "статический метод" с входящим параметром CONTEXT. Можешь его засунуть в класс, если считаешь так лучше

Сообщение было отредактировано: 22 июл 20, 17:43
22 июл 20, 17:45    [22171891]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
SpringMan
Zzz79,

Не понимаю, что конкретно надо. В груви можно так. Перед тобой обычный груви-скрипт, который просто делает логику. Это даже не класс, а просто "статический метод" с входящим параметром CONTEXT. Можешь его засунуть в класс, если считаешь так лучше

смотри груви берет переменную OperationContext context = ( и тут присваивает ее непонятно чему под названием CONTEXT)

меня эта строчка интересует в данный момент

ну и далее по тексту я так понял все же это исполняемый скрипт и переделать его в джаву не получится,так как все таки джава немного не про это
23 июл 20, 09:23    [22172107]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
вообщем по итогу я всю логику вынес в джава класс,а груви скрипт дергает этот класс
так что и проблема с контекстом тоже решилась,так как я его оставил в груви,не знаю этого ли от меня хотели или нет.
главное что практически работает
23 июл 20, 09:51    [22172125]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
Главная беда здесь - нечеткое задание. Groovy вполне себе самодостаточноый язык.
Хотя и не самый быстрый по runtime. Освой его и пиши на нем. И тогда проблема
перевода вообще не будет стоять.
23 июл 20, 10:27    [22172147]     Ответить | Цитировать Сообщить модератору
 Re: Перевести класс из Groovy в java  [new]
Zzz79
Member

Откуда:
Сообщений: 569
mayton
Главная беда здесь - нечеткое задание. Groovy вполне себе самодостаточноый язык.
Хотя и не самый быстрый по runtime. Освой его и пиши на нем. И тогда проблема
перевода вообще не будет стоять.

у нас задание его выпилить)- не знаю что имелось ввиду целиком или логику
я выпилил логику - вынес его в отдельный класс джава- так как это SOLID
а груви скрипт сейчас у меня выглядит вот так

import com.custsystems.custerp.docflow.operations.OperationContext
import com.custsystems.dictionary.docMaker.template.load.export.Export

OperationContext context = CONTEXT;

Export.commonSave(context)

где Export это класс в котором хранится логика

теперь при расширении и или рефакторинге я буду заниматься с джава классом - а этот скрипт меня больше не потревожит)

Но не уверен что от меня хотели именно этого



там вообще довольно объемная таска - выпилить груви ,добавить две кнопки на другую страницу по експорту/импорту - для них реализовать похожий функционал

учитывая что у нас фронт на ZK я теперь еще и фронтэндер по сути) честно говоря посещают мысли искать другое место - так как вроде опыт идет - но этот опыт довольно специфичный- ZK,самописный спринг XML конфиги в 2020 году продать такой опыт будет сложно)
23 июл 20, 10:41    [22172158]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить