tag:blogger.com,1999:blog-40065046555754739862024-03-05T06:27:25.263-08:00all things jMDAnews from and stuff about jMDA - a new lightweight approach to model driven architecture based on Java technologyAnonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.comBlogger21125tag:blogger.com,1999:blog-4006504655575473986.post-58642445137638242632018-06-10T01:44:00.000-07:002018-06-10T01:45:29.925-07:00javafx - combobox with autocompletion for custom typesHi,<br />
<br />
I'd like to share a solution for a javafx combobox with autocompletion for custom types. First of all I will show how to use it. Here is an example for a simple custom type that I will use for this example:<br />
<br />
private class Data implements Comparable<Data><br />
{<br />
private String string;<br />
private Data(String string) { this.string = string; }<br />
@Override public int compareTo(Data o) { return string.compareTo(o.string); }<br />
@Override public String toString() { return string; }<br />
}<br />
<br />
Next here comes an example for using autocompletion for the above custom type with the combobox:<br />
<br />
// create combo box (for custom type Data) as usual<br />
ComboBox<Data> cmbBx = new ComboBox<>();<br />
<br />
// cell factory that provides a list cell for a given Data item (see updateItem)<br />
Callback<ListView<Data>, ListCell<Data>> cellFactory =<br />
new Callback<ListView<Data>, ListCell<Data>>()<br />
{<br />
@Override public ListCell<Data> call(ListView<Data> lv)<br />
{<br />
return new ListCell<Data>()<br />
{<br />
@Override protected void updateItem(Data item, boolean empty)<br />
{<br />
super.updateItem(item, empty);<br />
if (item == null || empty) { setGraphic(null); }<br />
else { setText(item.string); }<br />
}<br />
};<br />
}<br />
};<br />
// converter that converts a given Data item to String and vice versa<br />
StringConverter<Data> converter =<br />
new StringConverter<Data>()<br />
{<br />
@Override public String toString(Data item)<br />
{<br />
if (item == null) return null;<br />
return item.string;<br />
}<br />
<br />
@Override public Data fromString(String string)<br />
{<br />
for (Data item : cmbBx.getItems())<br />
{<br />
if (item.string.equals(string)) return item;<br />
}<br />
return null;<br />
}<br />
};<br />
<br />
// use the cell factory method to provide content for the button cell<br />
cmbBx.setButtonCell(cellFactory.call(null));<br />
// let the cell factory deliver the content of the cells<br />
cmbBx.setCellFactory(cellFactory);<br />
// set a condition that lets a Data item appear in the list of the auto complete suggestions or not<br />
Predicate<Data> predicate =<br />
data -><br />
{<br />
String cmbBxEditorTextToLowerCase = cmbBx.getEditor().getText().toLowerCase();<br />
String dataStringToLowerCase = data.string.toLowerCase();<br />
boolean result = dataStringToLowerCase.contains(cmbBxEditorTextToLowerCase);<br />
return result;<br />
};<br />
<br />
cmbBx.setConverter(converter);<br />
<br />
// sample data<br />
ObservableList<Data> items = FXCollections.observableArrayList();<br />
items.add(new Data("apple1"));<br />
items.add(new Data("apple2"));<br />
items.add(new Data("apple3"));<br />
items.add(new Data("ball1"));<br />
items.add(new Data("ball2"));<br />
items.add(new Data("ball3"));<br />
items.add(new Data("cat1"));<br />
items.add(new Data("cat2"));<br />
items.add(new Data("cat3"));<br />
<br />
cmbBx.setItems(items);<br />
<br />
The above preparations is pretty much conventional stuff that users of combo boxes have to deal with anyway in javafx.<br />
<br />
However there is the predicate that should be mentioned here because it allows for "filtering" items of the combobox depending on the user input in the combo box editor. For the sample data above this means, that if the editor content is "a" all items are contained in the list of suggestions and if it is "t" then only the cats are contained.<br />
<br />
To add this behaviour to combo boxes you simply do this:<br />
<br />
AutoCompleteComboBoxListener<Data> autoCompleteComboBoxListener =<br />
new AutoCompleteComboBoxListener<Data>(cmbBx, predicate);<br />
<br />
One pretty little feature of AutoCompleteComboBoxListener is that you can change the items of the combo box on the fly by calling AutoCompleteComboBoxListener.repopulate(ObservableList<T> newPopulation).<br />
<br />
So finally here is the code for AutoCompleteComboBoxListener: <br />
<br />
import java.util.function.Predicate;<br />
<br />
import javafx.collections.FXCollections;<br />
import javafx.collections.ObservableList;<br />
import javafx.event.EventHandler;<br />
import javafx.scene.control.ComboBox;<br />
import javafx.scene.input.KeyCode;<br />
import javafx.scene.input.KeyEvent;<br />
<br />
public class AutoCompleteComboBoxListener<T> implements EventHandler<KeyEvent><br />
{<br />
// private final static Logger LOGGER = LogManager.getLogger(AutoCompleteComboBoxListener.class);<br />
<br />
// constructor injection<br />
private ComboBox<T> cmbBx;<br />
private Predicate<T> predicate;<br />
<br />
/** populated in constructor, holds a copy of the initial items */<br />
private ObservableList<T> initialItems = FXCollections.observableArrayList();<br />
<br />
public AutoCompleteComboBoxListener(final ComboBox<T> cmbBx, final Predicate<T> predicate)<br />
{<br />
this.cmbBx = cmbBx;<br />
this.predicate = predicate;<br />
<br />
initialItems.addAll(cmbBx.getItems());<br />
<br />
// if combobox was not editable all effort in this class would be superfluous<br />
cmbBx.setEditable(true);<br />
cmbBx.setOnAction<br />
(<br />
e -><br />
{<br />
cmbBx.getEditor().end();<br />
// LOGGER.debug("editor: " + cmbBx.getEditor().getText() + ", value: " + cmbBx.getValue());<br />
}<br />
);<br />
cmbBx.setOnKeyReleased(this);<br />
}<br />
<br />
@Override public void handle(KeyEvent keyEvent)<br />
{<br />
// handle events that allow for early return<br />
if (keyEvent.getCode() == KeyCode.ENTER)<br />
{<br />
cmbBx.setValue(cmbBx.getSelectionModel().getSelectedItem());<br />
// LOGGER.debug("editor: " + cmbBx.getEditor().getText() + ", value: " + cmbBx.getValue());<br />
return;<br />
}<br />
if (keyEvent.getCode() == KeyCode.DOWN)<br />
{<br />
if (cmbBx.isShowing() == false)<br />
{<br />
cmbBx.show();<br />
}<br />
return;<br />
}<br />
if ( keyEvent.getCode() == KeyCode.LEFT<br />
|| keyEvent.getCode() == KeyCode.RIGHT<br />
|| keyEvent.getCode() == KeyCode.HOME<br />
|| keyEvent.getCode() == KeyCode.END<br />
|| keyEvent.getCode() == KeyCode.TAB<br />
|| keyEvent.getCode() == KeyCode.BACK_SPACE<br />
|| keyEvent.getCode() == KeyCode.DELETE<br />
|| keyEvent.isControlDown()<br />
|| keyEvent.isAltDown()<br />
|| keyEvent.isShiftDown()<br />
)<br />
{<br />
return;<br />
}<br />
<br />
repopulate(initialItems);<br />
<br />
if (!cmbBx.getItems().isEmpty())<br />
{<br />
cmbBx.show();<br />
}<br />
}<br />
<br />
public void repopulate(ObservableList<T> newPopulation)<br />
{<br />
initialItems = newPopulation;<br />
<br />
boolean showing = cmbBx.isShowing();<br />
<br />
// combobox items will be repopulated, so make sure the "old" items do not show any longer on the<br />
// screen<br />
cmbBx.hide();<br />
<br />
// repopulate combobox.items with those initial items that match the predicate<br />
ObservableList<T> list = FXCollections.observableArrayList();<br />
cmbBx.setItems(list);<br />
<br />
initialItems<br />
.forEach<br />
(<br />
item -><br />
{<br />
if (predicate.test(item))<br />
{<br />
list.add(item);<br />
}<br />
}<br />
);<br />
<br />
if (showing) cmbBx.show();<br />
}<br />
}<br />
<br />
Cheers<br />
RogerAnonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-35676817468252996612017-12-03T12:53:00.002-08:002017-12-16T06:49:31.796-08:00jMDA UMLKit quickstart availableSo <a href="https://github.com/r-uu/jmda/blob/master/jmda/jmda.app.uml/doc/presentation/quickstart/UMLKit.odp" target="_blank">here are some slides</a> that help you quickstart jMDA UMLKit. The slides are also available at <span id="goog_1517884238"></span><a href="https://www.slideshare.net/RogerWegner/umlkit">slide share<span id="goog_1517884239"></span></a>.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-66817499923107185432017-11-08T12:26:00.003-08:002017-11-24T13:20:27.250-08:00jMDA still alive<span style="font-family: "arial" , "helvetica" , sans-serif;">Hi, </span><span style="font-family: "arial" , "helvetica" , sans-serif;">jMDA offers some new and updated features. This is just a short teaser. If somebody finds this interesting please contact me. This might encourage me to provide better information about the details. In short: there is a tool that can be used to produce UML class diagram style representations from Java source and binary code. In addition there is plenty of code that helps to make</span><br />
<span style="font-family: "arial";">- code generation</span><br />
<span style="font-family: "arial";">- java annotation processing and</span><br />
<span style="font-family: "arial";">- access to package javax.lang.model stuff</span><br />
<span style="font-family: "arial";">extremely convenient. As for the class diagram tool, here is a screenshot that demonstrates what it can do:</span><br />
<span style="font-family: Arial;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8RLZdriyYc-OZLNdXHsb6OFTpsFujC-c3etTiYYXUdsruF0213qN1Lt6UxnKCBUmBLEF_c_VvUmfw6D38XbAaFV335dVSpv5Pr8Sgc3ix4YvH-tO3Nbjk7Zg-xX8fRHa36RHP5CSWgCyc/s1600/advertising.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="alternative text" border="0" data-original-height="888" data-original-width="1292" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8RLZdriyYc-OZLNdXHsb6OFTpsFujC-c3etTiYYXUdsruF0213qN1Lt6UxnKCBUmBLEF_c_VvUmfw6D38XbAaFV335dVSpv5Pr8Sgc3ix4YvH-tO3Nbjk7Zg-xX8fRHa36RHP5CSWgCyc/s1600/advertising.png" title="uml class diagram created from java types" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">uml class diagram created from java types</td></tr>
</tbody></table>
<span style="font-family: "arial";"><br /></span>Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-47035857086954293822013-10-05T02:51:00.000-07:002013-10-05T02:52:32.992-07:00noDSL! – domain modelling with Java and software generation with jMDA<a href="http://jmdablog.blogspot.de/p/nodsl-domain-modelling-with-java-and.html">This article</a> introduces many of the most important concepts of jMDA in a concise example. It demonstrates how domain modelling, domain model access and code generation can be covered in a single and very comprehensive Java source code file. jMDA offers all this in a straight forward manner: no proprietary DSL has to be defined, no IDE plugins are necessary.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-16366156734287650892013-09-26T00:52:00.002-07:002013-09-26T00:52:22.785-07:00jump start annotation processing (even without annotations if you want)With jmda.core you can easily perform annotation processing. What's more you can even do so if you do not have annotated code. Read <a href="https://www.blogger.com/blogger.g?blogID=4006504655575473986#editor/target=post;postID=6240505204075115728;onPublishedMenu=posts;onClosedMenu=posts;postNum=3;src=postname">this</a> to find out how to do that.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-57583712164841711512013-09-26T00:39:00.001-07:002013-11-20T11:00:42.937-08:00define, compile and run dynamic code in RAMjmda.core provides a feature that <a href="http://jmdablog.blogspot.de/p/7define-compile-and-run-dynamiccode-in.html">compiles and runs Java source code in RAM</a>. Just define arbitrary executable Java source code in Strings, launch jmda RAMCompiler and execute the compiled output using standard Java reflection.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-49587741817889289762013-09-20T07:59:00.000-07:002013-09-26T00:10:31.449-07:00version 1.1.0 of jMDA arrivedVersion 1.1.0 of <a href="https://code.google.com/p/jmda/downloads/detail?name=jmda.core-1.1.0.zip&can=2&q=&sort=filename">jmda.core</a>, <a href="https://code.google.com/p/jmda/downloads/detail?name=jmda.gen-1.1.0.zip&can=2&q=&sort=filename">jmda.gen</a> and <a href="https://code.google.com/p/jmda/downloads/detail?name=jmda.sample-1.1.0.zip&can=2&q=&sort=filename">jmda.sample</a> have just been published together with <a href="https://code.google.com/p/jmda/downloads/detail?name=jmdabook-1.1.0.pdf&can=2&q=&sort=filename">jmdabook</a> at google code.<br />
Get your feet wet with jMDA quickly <a href="http://jmdablog.blogspot.de/p/nodsl-domain-modelling-with-java-and.html">here</a>.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-74749416751353668292013-06-24T06:00:00.001-07:002013-06-24T06:00:11.511-07:00annotation processing rounds explainedThere is a new article describing how javac controls annotation processing rounds <a href="http://jmdablog.blogspot.de/p/processing-rounds-jmda-tasks-de.html">here</a>.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-62405052040751157282013-06-24T06:00:00.000-07:002013-06-24T06:00:05.012-07:00jump start annotation processing within minutes using jMDA tasksjMDA introduces annotation processing tasks to facilitate jsr 269 utilisation. You can find a short introduction in how to use annotation processing tasks <a href="http://jmdablog.blogspot.de/p/define-and-run-jsr-269-compiler-plugins.html">here</a>.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-88739685700640170872013-06-16T08:37:00.001-07:002013-06-16T12:07:21.148-07:00jMDA publishes jMDA book 1.0.0 together with new versions of jmda.core and jmda.sampleThe new book is work in progress and will contain the most recent information available about jMDA products in the future. You can download version 1.0.0 <a href="https://code.google.com/p/jmda/downloads/detail?name=jmdabook-1.0.0.pdf&can=2&q=">here</a>.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-59367819866330136072013-05-05T12:59:00.000-07:002013-06-24T23:19:13.254-07:00jMDA releases version 1.0.0 of its software modelling and generator framework<br />
Today jMDA released a major upgrade of it's software modelling and generator framework. This <a href="http://jmdablog.blogspot.de/p/file-was-converted-to-xhtml-by.html">article</a> is an excerpt of a larger document describing jMDA that will be published later.<br />
<div class="western" lang="en-GB">
</div>
Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-3060016490338517612012-12-30T08:25:00.000-08:002012-12-31T00:54:15.252-08:00sample: jboss 7 datasource definition with derby network clientI've been messing around with JBoss 7 and Apache Derby Network Client lately. I did not find a datasource configuration example for exactly this combination so I post this to spare others annoying investigations on this.<br />
<br />
To sum it up: The configuration for my simple environment is very straight forward, especially there is no need to define a JBoss module or to specify particular Derby JDBC driver classes. All you have to do is place <span style="font-family: "Courier New",Courier,monospace;">derbyclient.jar</span> into JBoss <span style="font-family: "Courier New",Courier,monospace;">deployments</span> directory and insert a datasource definition into the respective section of the JBoss <span style="font-family: "Courier New",Courier,monospace;">standalone.xml</span> as follows:<br />
<br />
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"><datasources></span></span><br />
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"> ...<br /> <datasource jndi-name="java:/DataSourceDerbyNetwork"</span></span><br />
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"> pool-name="DataSourceDerbyNetwork"><br /> <connection-url>jdbc:derby://localhost:1527/<span style="color: blue;"><span style="background-color: white;"><b>c:/data/db/derby/xxx;create=true</b></span></span></connection-url><br /> <driver>derbyclient.jar</driver><br /> <pool><br /> <min-pool-size>5</min-pool-size><br /> <max-pool-size>20</max-pool-size><br /> </pool><br /> <security><br /> <user-name><span style="color: blue;"><b>yyy</b></span></user-name><br /> <password><span style="color: blue;"><b>zzz</b></span></password><br /> </security><br /> <timeout><br /> <idle-timeout-minutes>5</idle-timeout-minutes><br /> </timeout><br /> <statement><br /> <track-statements>true</track-statements><br /> </statement><br /> </datasource></span></span><br />
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"> ...<br /></datasources></span></span><br />
<br />
Of course you have to adjust the data printed in <span style="color: blue;"><b>bold</b></span> according to your individual needs. Please refer to the Derby documentation for further details about the connection-url for example.<br />
<br />
By the way: I removed the default datasource <span style="font-family: "Courier New",Courier,monospace;">ExampleDS</span> from standalone.xml and did not observe this causing any problems. Seems that <span style="font-family: "Courier New",Courier,monospace;">ExampleDS</span>, as its name says, is used for examples only.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-51525795306019993422012-10-07T05:19:00.003-07:002012-10-20T12:42:43.718-07:00Avoid unnecessary qualified type references in generated source codeThe <a href="http://code.google.com/p/jmda/downloads/detail?name=jmda.gen-0.9-preview-0.0.2.zip&can=2&q=&sort=filename">new version</a> of jmda.gen provides convenient and smart support for Java code generators to produce exactly those import statements that were needed. It also helps to avoid unnecessary qualified type names in generated code as well as name collisions in generated import statements.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-22980893196304011012012-09-17T12:35:00.002-07:002012-10-20T12:40:20.744-07:00Combine jmda.core with jmda.gen and create JUnit test suites for existing JUnit tests<a href="http://jmdablog.blogspot.de/p/sample-combine-jmdacore-with-jmdagen.html">This</a> new example demonstrates how to combine the jmda.core and jmda.gen
libraries. It shows how to find all JUnit test methods in a code base and and how to create JUnit
test suites that automatically run all JUnit tests package by package.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-21491111971456530352012-09-08T05:21:00.002-07:002012-09-19T11:01:42.696-07:00Create a simple Java source code generator with four lines of code using jmda.genI wrote a small quickstart example of how to get started with the jmda.gen framework. Hope you find <a href="http://jmdablog.blogspot.de/p/sample-create-source-code-generator.html">this</a> interesting.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-45251033775632493772012-09-08T01:07:00.000-07:002012-09-19T13:45:29.785-07:00Complete redesign of jmda.gen generator frameworkDuring the recent months I redesigned the jmda.gen generator framework completely. Today I start publishing <a href="http://code.google.com/p/jmda/downloads/detail?name=jmda.gen-0.9-preview-0.0.1.zip&can=2&q=" target="_blank">previews </a>of the upcoming new version 0.9 because I think that the library becomes more and more stable and mature. So if you are interested in building your own generators in a really comfortable and flexible manner then try and check out what jmda.gen can offer. You can find a jmda.gen quickstart example <a href="http://jmdablog.blogspot.de/p/sample-create-source-code-generator.html" target="_blank">here</a>.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-73689236555955242982012-06-22T21:01:00.002-07:002012-09-19T12:43:56.077-07:00Create / update jaxb.index filesCreating or Updating jaxb.index files with jMDA JAXB sample tools is as easy as this:<br />
<br />
<title></title>
<style type="text/css">
<!--code { font-family: Courier New, Courier; font-size: 10pt; margin: 0px; }</style>
<br />
<div align="left" class="java">
<table bgcolor="#ffffff" border="0" cellpadding="3" cellspacing="0">
<tbody>
<tr>
<td align="left" nowrap="nowrap" valign="top"><code>
<span style="color: white;"> </span><span style="color: black;">Map<File, Set<String>> indexData =</span><br />
<span style="color: white;"> </span><span style="color: black;">JAXBIndexDataBuilder.build</span><span style="color: black;">(</span><span style="color: black;">rootDirectory</span><span style="color: black;">)</span><span style="color: black;">;</span><br />
<span style="color: white;"> </span><br />
<span style="color: white;"> </span><span style="color: #7f0055;"><b>for </b></span><span style="color: black;">(</span><span style="color: black;">File packageDirectory : indexData.keySet</span><span style="color: black;">())</span><br />
<span style="color: white;"> </span><span style="color: black;">{</span><br />
<span style="color: white;"> </span><span style="color: black;">FileUtils.writeLines</span><span style="color: black;">(</span><br />
<span style="color: white;"> </span><span style="color: #7f0055;"><b>new </b></span><span style="color: black;">File</span><span style="color: black;">(</span><span style="color: black;">packageDirectory, </span><span style="color: #2a00ff;">"jaxb.index"</span><span style="color: black;">)</span><span style="color: black;">,</span><br />
<span style="color: white;"> </span><span style="color: black;">indexData.get</span><span style="color: black;">(</span><span style="color: black;">packageDirectory</span><span style="color: black;">))</span><span style="color: black;">;</span><br />
<span style="color: white;"> </span><span style="color: black;">}</span></code>
</td>
</tr>
</tbody></table>
</div>
The updated the <a href="http://code.google.com/p/jmda/downloads/detail?name=jmda.sample-0.8.1.zip&can=2&q=" target="_blank">.zip file</a> contains the JAXBIndexFileWriter class which does pretty much the same as what is shown above.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-77708504494291486022012-06-16T12:05:00.001-07:002012-06-16T12:30:48.363-07:00New jMDA based tools help to keep JAXB index files and package lists in syncA new "getting started" example has just been <a href="http://jmdablog.blogspot.de/p/keep-jaxbindex-files-and-package-lists.html" target="_blank">published</a>. It describes how jMDA makes it extremely easy to develope tools that help to accomplish some tedious maintainance tasks when working with JAXB. The tools use information provided by a simple jMDA processor.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-6480183944591745732012-06-16T06:55:00.000-07:002012-06-16T12:29:17.292-07:00Update of jmda.core availableA new version of jmda.core (<a href="http://code.google.com/p/jmda/downloads/detail?name=jmda.core-0.8.1.zip&can=2&q=" target="_blank">jmda.core-0.8.1</a>) is available. For a summary of new features and improvements see release-notes.txt inside the downloadable zip archive.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-91483023906510143072012-06-03T02:18:00.000-07:002012-06-03T11:07:52.873-07:00What has been going on with jMDA in the recent year?When I discussed about jMDA with colleagues and friends in the past it became obvious that one thing is missing. Textual models such as Java source code files in jMDA are fine but graphical models often are <b>sooo muuuch mooore expressive</b>!<p>
I could not disagree with that and because I'm a huge UML fan I started looking around for appropriate Java to UML reverse engineering tools. It soon turned out that it was not easy to find any. Existing products often are extreme heavy weights, clumsy to use, expensive and so on. So I started playing around with an own solution. With jMDA at hand I had everything necessary to find out anything about a given jMDA model so the only thing to do was to bring that model information into an appealing graphical representation.
First results looked very promising (at least in my eyes).
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia1KGlbvT5tGF-Kgf_z7zImBpUtew-KFxefwjWrHTTfHm9AU3JdBCNE4GY3FUHCq8IoPSnlKaUWfAGPzxWt3dqatIWJOZnMlM26A0i9IeGpceHFkYQi7dWzu2HeKICDFlLEo4JiNXJVq0s/s1600/screenshot.uml.swing.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="212" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia1KGlbvT5tGF-Kgf_z7zImBpUtew-KFxefwjWrHTTfHm9AU3JdBCNE4GY3FUHCq8IoPSnlKaUWfAGPzxWt3dqatIWJOZnMlM26A0i9IeGpceHFkYQi7dWzu2HeKICDFlLEo4JiNXJVq0s/s320/screenshot.uml.swing.jpg" /></a></div>
But soon some really nasty problems occured. The biggest among them being myself and my lacking knowledge and experience in developing software with a huge amount of obviously non mainstream graphical requirements. I started with a Java Swing approach but got frustrated about a lot of features that seem to be missing.<p>
Then I decided to try JavaFX 2.0. Again first results looked promising but missing basic features were a big disappointment.<p>
After all I spent a lot of time in these investigations during the last year without satisfying results. However recently I became to know <a href="http://www.objectaid.com/">UML Explorer</a> which does most of the things I was looking for very nicely in an eclipse environment. So I gave up or at least postponed my plans for an own solution. This will allow to concentrate on developing new and improving existing features for the actual jMDA products.
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtY4zKFDX8a1jMss5rog0D6Paflh93jkUDW1X4F0Wx5ouZx4ZhyphenhyphenWd5KgHVm95qO4AEbkLLA595denfdj-icUnQ-SdL3T-MEQJKC6LS0_q7YJsEJJrOfvLLXdIi9JkScl8yN-kxP_hbYyj8/s1600/person_contact.PNG" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="110" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtY4zKFDX8a1jMss5rog0D6Paflh93jkUDW1X4F0Wx5ouZx4ZhyphenhyphenWd5KgHVm95qO4AEbkLLA595denfdj-icUnQ-SdL3T-MEQJKC6LS0_q7YJsEJJrOfvLLXdIi9JkScl8yN-kxP_hbYyj8/s320/person_contact.PNG" /></a></div>Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0tag:blogger.com,1999:blog-4006504655575473986.post-36640217829215216082012-06-02T08:34:00.000-07:002012-06-16T12:29:59.345-07:00New blog started for jMDAMore than one and a half year after publishing <a href="http://code.google.com/p/jmda/" target="_blank">jMDA</a> as an open source project I start this blog today. The blog is meant to provide up to date information about hopefully interesting things related to jMDA. It will replace the old project home page which will be discontinued soon.<br />
With this blog I hope to increase community interest and participation in jMDA and would be happy to receive comments and feedback. In the jMDA project I'd like to collaboratively improve and extend jMDA technology. I plan to discuss and publish new libraries that address particular application fields for jMDA.<br />
Finally this blog wants to be a place for the community to share ideas and discuss jMDA related topics.<br />
Some initial information about jMDA is already available <a href="http://jmdablog.blogspot.de/p/overview.html">here</a>.Anonymoushttp://www.blogger.com/profile/06019340770018609036noreply@blogger.com0