1. Project
1.1. Building
The Codion framework is built with Gradle and includes the Gradle Wrapper with a toolchain defined, so assuming you have cloned the repository and worked your way into the project directory you can build the framework by running the following command.
gradlew build
Note
|
This may take a few minutes, depending on the machine. |
To install the Codion framework into your local Maven repository run the following command.
gradlew publishToMavenLocal
1.2. Running the demos
Note
|
The demos use an embedded in-memory database, so changes to data do not persist. |
1.2.1. Local database connection
You can start by running a client from one of the demo projects (employees, chinook, petstore or world) with a local database connection.
gradlew codion-demos-chinook:runClientLocal
1.2.2. Remote database connection
In order to run a client with a remote or http connection the remote server must be started first.
gradlew codion-framework-server:runServer
To run a demo client with a remote connection use the following command.
gradlew codion-demos-chinook:runClientRMI
You can run the Server Monitor application to see how the server is behaving, with the following command.
gradlew codion-swing-framework-server-monitor:runServerMonitor
Note
|
The client handles server restarts gracefully, you can try shutting down the server via the Server Monitor, play around in the client until you get a 'Connection refused' exception. After you restart the server the client simply reconnects and behaves as if nothing happened. |
1.3. Code style
After having wrestled with many code formatters and never being fully satisfied with the result, I’ve wound up relying on IntelliJ for code formatting.
The project has a defined code style which can be found in the .idea/codeStyles
folder.
2. Architecture
The Codion framework is based on a three tiered architecture.
-
Database layer
-
Model layer
-
UI layer
2.1. Database layer
The EntityConnection class defines the database layer. See Manual:EntityConnection
2.2. Model layer
The EntityModel class defines the model layer. See Manual:EntityModel.
2.3. UI layer
The EntityPanel class defines the UI layer. See Manual:EntityPanel.
3. Client
3.1. Features
-
Lightweight client with a simple synchronous event model
-
Provides a practically mouse free user experience
-
Graceful handling of network outages and server restarts
-
Clear separation between model and UI
-
Easy to use load testing harness provided for application models
-
UI data bindings for most common components provided by the framework
-
Implementing data bindings for new components is made simple with building blocks provided by the framework.
-
The default UI layout is a simple and intuitive “waterfall” master-detail view
-
Extensive searching and filtering capabilities
-
Flexible keyboard-centric UI based on tab and split panes, detachable panels and toolbars
-
Detailed logging of client actions
3.3. Architecture
3.3.3. Assembly
EntityModel
/**
* Creates a SwingEntityModel based on the {@link Artist#TYPE} entity
* with a detail model based on {@link Album#TYPE}
* @param connectionProvider the connection provider
*/
static SwingEntityModel artistModel(EntityConnectionProvider connectionProvider) {
// create a default edit model
SwingEntityEditModel artistEditModel =
new SwingEntityEditModel(Artist.TYPE, connectionProvider);
// create a default table model, wrapping the edit model
SwingEntityTableModel artistTableModel =
new SwingEntityTableModel(artistEditModel);
// create a default model wrapping the table model
SwingEntityModel artistModel =
new SwingEntityModel(artistTableModel);
// Note that this does the same as the above, that is, creates
// a SwingEntityModel with a default edit and table model
SwingEntityModel albumModel =
new SwingEntityModel(Album.TYPE, connectionProvider);
artistModel.addDetailModel(albumModel);
return artistModel;
}
EntityPanel
/**
* Creates a EntityPanel based on the {@link Artist#TYPE} entity
* with a detail panel based on {@link Album#TYPE}
* @param connectionProvider the connection provider
*/
static EntityPanel artistPanel(EntityConnectionProvider connectionProvider) {
// create the EntityModel to base the panel on (calling the above method)
SwingEntityModel artistModel = artistModel(connectionProvider);
// the edit model
SwingEntityEditModel artistEditModel = artistModel.editModel();
// the table model
SwingEntityTableModel artistTableModel = artistModel.tableModel();
// the album detail model
SwingEntityModel albumModel = artistModel.detailModel(Album.TYPE);
// create a EntityEditPanel instance, based on the artist edit model
EntityEditPanel artistEditPanel = new EntityEditPanel(artistEditModel) {
@Override
protected void initializeUI() {
createTextField(Artist.NAME).columns(15);
addInputPanel(Artist.NAME);
}
};
// create a EntityTablePanel instance, based on the artist table model
EntityTablePanel artistTablePanel = new EntityTablePanel(artistTableModel);
// create a EntityPanel instance, based on the artist model and
// the edit and table panels from above
EntityPanel artistPanel = new EntityPanel(artistModel, artistEditPanel, artistTablePanel);
// create a new EntityPanel, without an edit panel and
// with a default EntityTablePanel
EntityPanel albumPanel = new EntityPanel(albumModel);
artistPanel.addDetailPanel(albumPanel);
return artistPanel;
}
3.3.4. Full Example
Show code
package is.codion.framework.demos.chinook.tutorial;
import is.codion.common.db.database.Database;
import is.codion.common.user.User;
import is.codion.framework.db.EntityConnectionProvider;
import is.codion.framework.db.local.LocalEntityConnectionProvider;
import is.codion.framework.demos.chinook.domain.Chinook.Album;
import is.codion.framework.demos.chinook.domain.Chinook.Artist;
import is.codion.framework.demos.chinook.domain.impl.ChinookImpl;
import is.codion.swing.framework.model.SwingEntityEditModel;
import is.codion.swing.framework.model.SwingEntityModel;
import is.codion.swing.framework.model.SwingEntityTableModel;
import is.codion.swing.framework.ui.EntityEditPanel;
import is.codion.swing.framework.ui.EntityPanel;
import is.codion.swing.framework.ui.EntityTablePanel;
/**
* When running this make sure the chinook demo module directory is the
* working directory, due to a relative path to a db init script
*/
public final class ClientArchitecture {
// tag::entityModel[]
/**
* Creates a SwingEntityModel based on the {@link Artist#TYPE} entity
* with a detail model based on {@link Album#TYPE}
* @param connectionProvider the connection provider
*/
static SwingEntityModel artistModel(EntityConnectionProvider connectionProvider) {
// create a default edit model
SwingEntityEditModel artistEditModel =
new SwingEntityEditModel(Artist.TYPE, connectionProvider);
// create a default table model, wrapping the edit model
SwingEntityTableModel artistTableModel =
new SwingEntityTableModel(artistEditModel);
// create a default model wrapping the table model
SwingEntityModel artistModel =
new SwingEntityModel(artistTableModel);
// Note that this does the same as the above, that is, creates
// a SwingEntityModel with a default edit and table model
SwingEntityModel albumModel =
new SwingEntityModel(Album.TYPE, connectionProvider);
artistModel.addDetailModel(albumModel);
return artistModel;
}
// end::entityModel[]
// tag::entityPanel[]
/**
* Creates a EntityPanel based on the {@link Artist#TYPE} entity
* with a detail panel based on {@link Album#TYPE}
* @param connectionProvider the connection provider
*/
static EntityPanel artistPanel(EntityConnectionProvider connectionProvider) {
// create the EntityModel to base the panel on (calling the above method)
SwingEntityModel artistModel = artistModel(connectionProvider);
// the edit model
SwingEntityEditModel artistEditModel = artistModel.editModel();
// the table model
SwingEntityTableModel artistTableModel = artistModel.tableModel();
// the album detail model
SwingEntityModel albumModel = artistModel.detailModel(Album.TYPE);
// create a EntityEditPanel instance, based on the artist edit model
EntityEditPanel artistEditPanel = new EntityEditPanel(artistEditModel) {
@Override
protected void initializeUI() {
createTextField(Artist.NAME).columns(15);
addInputPanel(Artist.NAME);
}
};
// create a EntityTablePanel instance, based on the artist table model
EntityTablePanel artistTablePanel = new EntityTablePanel(artistTableModel);
// create a EntityPanel instance, based on the artist model and
// the edit and table panels from above
EntityPanel artistPanel = new EntityPanel(artistModel, artistEditPanel, artistTablePanel);
// create a new EntityPanel, without an edit panel and
// with a default EntityTablePanel
EntityPanel albumPanel = new EntityPanel(albumModel);
artistPanel.addDetailPanel(albumPanel);
return artistPanel;
}
// end::entityPanel[]
public static void main(String[] args) {
// Configure the database
Database.DATABASE_URL.set("jdbc:h2:mem:h2db");
Database.DATABASE_INIT_SCRIPTS.set("src/main/sql/create_schema.sql");
// initialize a connection provider, this class is responsible
// for supplying a valid connection or throwing an exception
// in case a connection can not be established
EntityConnectionProvider connectionProvider =
LocalEntityConnectionProvider.builder()
.domain(new ChinookImpl())
.user(User.parse("scott:tiger"))
.build();
EntityPanel artistPanel = artistPanel(connectionProvider);
// lazy initialization
artistPanel.initialize();
// fetch data from the database
artistPanel.model().tableModel().refresh();
// uncomment the below line to display the panel
// displayInDialog(null, artistPanel, "Artists");
connectionProvider.close();
}
}
4. Server
The Codion server provides RMI and HTTP connection options to clients.
4.1. Features
-
Firewall friendly RMI; uses one way communications without callbacks and can be configured to serve on a single fixed port
-
Integrated web server for serving HTTP client connections, based on Javalin and Jetty
-
All user authentication left to the database by default
-
Comprehensive administration and monitoring facilities via the ServerMonitor
-
Featherweight server with moderate memory and CPU usage
4.2. Security
Here’s a great overview of RMI security risks and mitigations.
4.2.1. Authentication
The Codion server does not perform any user authentication by default, it leaves that up the underlying database. An authentication layer can be added by implementing a Authenticator and registering it with the ServiceLoader.
4.2.2. RMI SSL encryption
To enable SSL encryption between client and server, create a keystore and truststore pair and set the following system properties.
4.2.4. Serialization filtering
The framework provides a way to configure a ObjectInputFilter for deserialization, by specifying a ObjectInputFilterFactory implementation class with the following system property.
codion.server.objectInputFilterFactoryClassName=\
my.serialization.filter.MyObjectInputFilterFactory
Serialization whitelist
To use the serialization whitelist filter provided by the framework, set the following system property.
codion.server.objectInputFilterFactoryClassName=\
is.codion.common.rmi.server.WhitelistInputFilterFactory
The whitelist is configured via the following system property.
codion.server.serializationFilterWhitelist=config/whitelist.txt
codion.server.serializationFilterWhitelist=classpath:whitelist.txt
A whitelist can be created during a server dry-run by adding the following system property. The whitelist containing all classes deserialized during the run is written to disk on server shutdown.
codion.server.serializationFilterDryRun=true
Example whitelist
ch.qos.logback.classic.Level
com.sun.proxy.$Proxy*
java.lang.Boolean
java.lang.Character
java.lang.Double
java.lang.Enum
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Number
java.lang.Object
java.lang.String
java.lang.reflect.Proxy
java.math.BigDecimal
java.math.BigInteger
java.time.LocalDate
java.time.LocalDateTime
java.time.LocalTime
java.time.Ser
java.time.ZoneId
java.time.ZoneRegion
java.util.ArrayList
java.util.Arrays$ArrayList
java.util.Collections$EmptyList
java.util.Collections$EmptyMap
java.util.Collections$SingletonList
java.util.Collections$SingletonMap
java.util.Collections$SingletonSet
java.util.Collections$UnmodifiableCollection
java.util.Collections$UnmodifiableList
java.util.Collections$UnmodifiableMap
java.util.Collections$UnmodifiableSet
java.util.Collections$UnmodifiableRandomAccessList
java.util.Date
java.util.HashMap
java.util.HashSet
java.util.LinkedHashMap
java.util.LinkedHashSet
java.util.Locale
java.util.Map$Entry
java.util.UUID
net.sf.jasperreports.compilers.ConstantExpressionEvaluation
net.sf.jasperreports.compilers.FieldEvaluation
net.sf.jasperreports.compilers.ReportExpressionEvaluationData
net.sf.jasperreports.engine.JRPropertiesMap
net.sf.jasperreports.engine.JasperReport
net.sf.jasperreports.engine.JRBand
net.sf.jasperreports.engine.JRExpressionChunk
net.sf.jasperreports.engine.JRField
net.sf.jasperreports.engine.JRParameter
net.sf.jasperreports.engine.JRQueryChunk
net.sf.jasperreports.engine.JRVariable
net.sf.jasperreports.engine.base.JRBaseBand
net.sf.jasperreports.engine.base.JRBaseBoxBottomPen
net.sf.jasperreports.engine.base.JRBaseBoxLeftPen
net.sf.jasperreports.engine.base.JRBaseBoxPen
net.sf.jasperreports.engine.base.JRBaseBoxRightPen
net.sf.jasperreports.engine.base.JRBaseBoxTopPen
net.sf.jasperreports.engine.base.JRBaseDataset
net.sf.jasperreports.engine.base.JRBaseElement
net.sf.jasperreports.engine.base.JRBaseElementGroup
net.sf.jasperreports.engine.base.JRBaseExpression
net.sf.jasperreports.engine.base.JRBaseExpressionChunk
net.sf.jasperreports.engine.base.JRBaseField
net.sf.jasperreports.engine.base.JRBaseLineBox
net.sf.jasperreports.engine.base.JRBaseParagraph
net.sf.jasperreports.engine.base.JRBaseParameter
net.sf.jasperreports.engine.base.JRBasePen
net.sf.jasperreports.engine.base.JRBaseQuery
net.sf.jasperreports.engine.base.JRBaseQueryChunk
net.sf.jasperreports.engine.base.JRBaseReport
net.sf.jasperreports.engine.base.JRBaseSection
net.sf.jasperreports.engine.base.JRBaseStaticText
net.sf.jasperreports.engine.base.JRBaseTextElement
net.sf.jasperreports.engine.base.JRBaseTextField
net.sf.jasperreports.engine.base.JRBaseVariable
net.sf.jasperreports.engine.design.JRReportCompileData
net.sf.jasperreports.engine.type.CalculationEnum
net.sf.jasperreports.engine.type.EvaluationTimeEnum
net.sf.jasperreports.engine.type.HorizontalTextAlignEnum
net.sf.jasperreports.engine.type.IncrementTypeEnum
net.sf.jasperreports.engine.type.OrientationEnum
net.sf.jasperreports.engine.type.PositionTypeEnum
net.sf.jasperreports.engine.type.PrintOrderEnum
net.sf.jasperreports.engine.type.ResetTypeEnum
net.sf.jasperreports.engine.type.RunDirectionEnum
net.sf.jasperreports.engine.type.SectionTypeEnum
net.sf.jasperreports.engine.type.SplitTypeEnum
net.sf.jasperreports.engine.type.StretchTypeEnum
net.sf.jasperreports.engine.type.TextAdjustEnum
net.sf.jasperreports.engine.type.WhenResourceMissingTypeEnum
is.codion.common.Conjunction
is.codion.common.Operator
is.codion.common.db.operation.DefaultFunctionType
is.codion.common.db.operation.DefaultProcedureType
is.codion.common.db.report.AbstractReport
is.codion.common.db.report.DefaultReportType
is.codion.common.rmi.client.DefaultConnectionRequest
is.codion.common.user.DefaultUser
is.codion.common.version.DefaultVersion
is.codion.framework.db.DefaultSelect
is.codion.framework.db.DefaultUpdate
is.codion.framework.domain.DefaultDomainType
is.codion.framework.domain.entity.attribute.DefaultAttribute
is.codion.framework.domain.entity.attribute.DefaultAttribute$DefaultType
is.codion.framework.domain.entity.attribute.DefaultColumn
is.codion.framework.domain.entity.attribute.DefaultForeignKey
is.codion.framework.domain.entity.attribute.DefaultForeignKey$DefaultReference
is.codion.framework.domain.entity.condition.AbstractCondition
is.codion.framework.domain.entity.condition.AbstractColumnCondition
is.codion.framework.domain.entity.condition.DefaultAllCondition
is.codion.framework.domain.entity.condition.DefaultConditionCombination
is.codion.framework.domain.entity.condition.DefaultCustomCondition
is.codion.framework.domain.entity.condition.AbstractColumnCondition
is.codion.framework.domain.entity.condition.DualValueColumnCondition
is.codion.framework.domain.entity.condition.MultiValueColumnCondition
is.codion.framework.domain.entity.condition.SingleValueColumnCondition
is.codion.framework.domain.entity.condition.DefaultConditionType
is.codion.framework.domain.entity.DefaultEntity
is.codion.framework.domain.entity.DefaultEntity$EntityInvoker
is.codion.framework.domain.entity.DefaultEntityType
is.codion.framework.domain.entity.DefaultForeignKey
is.codion.framework.domain.entity.DefaultForeignKey$DefaultReference
is.codion.framework.domain.entity.DefaultKey
is.codion.framework.domain.entity.DefaultOrderBy
is.codion.framework.domain.entity.DefaultOrderBy$DefaultOrderByColumn
is.codion.framework.domain.entity.Entity
is.codion.framework.domain.entity.ImmutableEntity
is.codion.framework.domain.entity.OrderBy$NullOrder
is.codion.framework.demos.chinook.domain.Chinook
is.codion.framework.demos.chinook.domain.Chinook$Invoice
is.codion.framework.demos.chinook.domain.Chinook$Playlist$RandomPlaylistParameters
is.codion.framework.demos.chinook.domain.Chinook$Track
is.codion.framework.demos.chinook.domain.Chinook$Track$RaisePriceParameters
is.codion.framework.demos.employees.domain.*
is.codion.framework.demos.world.domain.api.*
is.codion.framework.demos.petclinic.domain.*
is.codion.plugin.jasperreports.DefaultJRReportType
4.3. Configuration
4.3.1. Example configuration file
# Database configuration
codion.db.url=jdbc:h2:mem:h2db
codion.db.useOptimisticLocking=true
codion.db.countQueries=true
codion.db.initScripts=\
../config/employees/create_schema.sql,\
../config/chinook/create_schema.sql,\
../config/petstore/create_schema.sql,\
../config/world/create_schema.sql
# The admin user credentials, used by the server monitor application
codion.server.admin.user=scott:tiger
# Client logging disabled by default
codion.server.clientLogging=false
# A connection pool based on this user is created on startup
codion.server.connectionPoolUsers=scott:tiger
# The port used by clients
codion.server.port=2222
# The port for the admin interface, used by the server monitor
codion.server.admin.port=4444
# RMI Registry port
codion.server.registryPort=1099
# Any auxiliary servers to run alongside this server
codion.server.auxiliaryServerFactoryClassNames=\
is.codion.framework.servlet.EntityServletServerFactory
# The http port
codion.server.http.port=8080
# Specifies whether or not to use https
codion.server.http.secure=false
# The ObjectInputFilterFactory class to use
codion.server.objectInputFilterFactoryClassName=\
is.codion.common.rmi.server.WhitelistInputFilterFactory
# The serialization whitelist to use for RMI deserialization
codion.server.serializationFilterWhitelist=\
../config/serialization-whitelist.txt
# RMI configuration
java.rmi.server.hostname=localhost
java.rmi.server.randomIDs=true
# SSL configuration
javax.net.ssl.keyStore=../config/keystore.jks
javax.net.ssl.keyStorePassword=crappypass
# Used to connect to the server to shut it down
#codion.client.trustStore=../config/truststore.jks
4.4. Code examples
Absolute bare-bones examples of how to run the EntityServer and connect to it.
4.4.1. RMI
Database database = H2DatabaseFactory
.createDatabase("jdbc:h2:mem:testdb",
"src/main/sql/create_schema.sql");
EntityServerConfiguration configuration = EntityServerConfiguration.builder(SERVER_PORT, REGISTRY_PORT)
.domainClassNames(List.of(Store.class.getName()))
.database(database)
.sslEnabled(false)
.build();
EntityServer server = EntityServer.startServer(configuration);
RemoteEntityConnectionProvider connectionProvider =
RemoteEntityConnectionProvider.builder()
.port(SERVER_PORT)
.registryPort(REGISTRY_PORT)
.domainType(Store.DOMAIN)
.user(parse("scott:tiger"))
.clientTypeId("ClientServer")
.build();
EntityConnection connection = connectionProvider.connection();
List<Entity> customers = connection.select(all(Customer.TYPE));
customers.forEach(System.out::println);
connection.close();
server.shutdown();
4.4.2. HTTP
Database database = H2DatabaseFactory
.createDatabase("jdbc:h2:mem:testdb",
"src/main/sql/create_schema.sql");
EntityService.HTTP_SERVER_PORT.set(HTTP_PORT);
EntityServerConfiguration configuration = EntityServerConfiguration.builder(SERVER_PORT, REGISTRY_PORT)
.domainClassNames(List.of(Store.class.getName()))
.database(database)
.sslEnabled(false)
.auxiliaryServerFactoryClassNames(List.of(EntityServiceFactory.class.getName()))
.build();
EntityServer server = EntityServer.startServer(configuration);
HttpEntityConnectionProvider connectionProvider =
HttpEntityConnectionProvider.builder()
.port(HTTP_PORT)
.https(false)
.domainType(Store.DOMAIN)
.user(parse("scott:tiger"))
.clientTypeId("ClientServer")
.build();
EntityConnection connection = connectionProvider.connection();
List<Entity> customers = connection.select(all(Customer.TYPE));
customers.forEach(System.out::println);
connection.close();
server.shutdown();
5. Server Monitor
The Codion Server Monitor provides a way to monitor the Codion server.
Below are screenshots of the different server monitor tabs, after ~1 1/2 hours of running the Chinook load test, with ~10 minutes of ramping up to 100 client instances. The server is running on a Raspberry Pi 4, Ubuntu Server 20.10, JDK 19, -Xmx256m, using a HikariCP connection pool on top of an H2 in-memory database.
6. Code style and design
6.1. Factories and builders
Most concrete framework classes, which implement a public interface, are final, package private, and are instantiated with the help of static methods in the interface they implement.
6.1.1. Factories
Static factory methods are provided for classes with a simple state. These are usually named after the interface, which makes using static imports quite convenient.
Event<String> event = event(); // Event.event()
Value<Integer> value = Value.value();
State state = State.state(true);
EntityConditionModel conditionModel =
EntityConditionModel.entityConditionModel(Customer.TYPE, connectionProvider);
6.1.2. Builders
For classes with a more complex state, a builder
method is provided in the interface.
TaskScheduler scheduler =
TaskScheduler.builder(() -> {})
.interval(5, TimeUnit.SECONDS)
.initialDelay(15)
.build();
TemporalField<LocalDate> field =
TemporalField.builder(LocalDate.class)
.dateTimePattern("dd.MM.yyyy")
.columns(12)
.border(createTitledBorder("Date"))
.build();
6.2. Accessors
Immutable fields are accessed using methods named after the field, without a get
/is
prefix.
Observer<String> observer = event.observer();
LocalEntityConnection connection = connectionProvider.connection();
boolean modified = entity.modified();
Entity.Key primaryKey = entity.primaryKey();
A get
/is
prefix implies that the field is mutable and that a corresponding setter method exists, with a set
prefix.
boolean optimisticLocking = connection.isOptimisticLocking();
connection.setOptimisticLocking(false);
6.2.1. Observables
Many classes expose their internal state via the Mutable or Value classes, which can be used to mutate the associated state or observe it by adding listeners or consumers.
TableSelection<List<String>> selection = tableModel.selection();
List<Integer> selectedIndexes = selection.indexes().get();
selection.indexes().set(asList(0, 1, 2));
selection.items().addListener(() -> System.out.println("Selected items changed"));
table.sortingEnabled().set(false);
6.3. Exceptions
There are of course some exceptions to these rules, such as a get
prefix on an accessor for a functionally immutable field or a is
prefix on an immutable boolean field, but these exceptions are usually to keep the style of a class being extended, such as Swing components and should be few and far between.
7. Modules
7.1. Common
Common classes used throughout the framework.
codion-common-core
Dependency graph
codion-common-db
JDBC related classes.
Dependency graph
codion-common-model
Common model classes.
Dependency graph
codion-common-i18n
Dependency graph
codion-common-rmi
RMI related classes.
Dependency graph
7.2. DBMS
Database specific implementation classes.
codion-dbms-db2
Dependency graph
codion-dbms-derby
Dependency graph
codion-dbms-h2
Dependency graph
codion-dbms-hsqldb
Dependency graph
codion-dbms-mariadb
Dependency graph
codion-dbms-mysql
Dependency graph
codion-dbms-oracle
Dependency graph
codion-dbms-postgresql
Dependency graph
codion-dbms-sqlite
Dependency graph
codion-dbms-sqlserver
Dependency graph
7.3. Framework
The framework itself.
codion-framework-domain
Domain model related classes.
Dependency graph
codion-framework-domain-db
Domain model generation from a database schema.
Dependency graph
codion-framework-domain-test
Domain model unit test related classes.
Dependency graph
codion-framework-db-core
Core database connection related classes.
Dependency graph
codion-framework-db-local
Local JDBC connection related classes.
Dependency graph
codion-framework-db-rmi
RMI connection related classes.
Dependency graph
codion-framework-db-http
HTTP connection related classes.
Dependency graph
codion-framework-i18n
Internationalization strings.
Dependency graph
codion-framework-json-domain
Dependency graph
codion-framework-json-db
Dependency graph
codion-framework-model
Common framework model classes.
Dependency graph
codion-framework-model-test
General application model unit test related classes.
Dependency graph
codion-framework-server
Framework server classes.
Dependency graph
codion-framework-servlet
HTTP servlet server classes.
Dependency graph
7.4. Swing
Swing client implementation.
codion-swing-common-model
Common Swing model classes.
Dependency graph
codion-swing-common-ui
Common Swing UI classes.
Dependency graph
codion-swing-framework-model
Dependency graph
codion-swing-framework-ui
Dependency graph
codion-swing-framework-ui-test
Dependency graph
7.5. Tools
codion-tools-server-monitor-model
Dependency graph
codion-tools-server-monitor-ui
Dependency graph
8. Utilities
8.1. IntelliJ IDEA
8.1.1. Live templates
Here are a few live templates for IntelliJ, reducing the typing required when defining a domain model.
Add this file to the templates directory in the IntelliJ IDEA configuration directory.
View template file
<templateSet group="codion">
<template name="cod" value="Column<Double> $ATTRIBUTE_NAME$ = TYPE.doubleColumn("$COLUMN_NAME$");$END$" description="Column<Double>" toReformat="false" toShortenFQNames="true">
<variable name="COLUMN_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", COLUMN_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="coi" value="Column<Integer> $ATTRIBUTE_NAME$ = TYPE.integerColumn("$COLUMN_NAME$");$END$" description="Column<Integer>" toReformat="false" toShortenFQNames="true">
<variable name="COLUMN_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", COLUMN_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="col" value="Column<Long> $ATTRIBUTE_NAME$ = TYPE.longColumn("$COLUMN_NAME$");$END$" description="Column<Long>" toReformat="false" toShortenFQNames="true">
<variable name="COLUMN_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", COLUMN_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="cos" value="Column<String> $ATTRIBUTE_NAME$ = TYPE.stringColumn("$COLUMN_NAME$");$END$" description="Column<String>" toReformat="false" toShortenFQNames="true">
<variable name="COLUMN_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", COLUMN_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="fk" value="ForeignKey $ATTRIBUTE_NAME$ = TYPE.foreignKey("$FK_NAME$", $END$);" description="ForeignKey" toReformat="false" toShortenFQNames="true">
<variable name="FK_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", FK_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="cold" value="Column<LocalDate> $ATTRIBUTE_NAME$ = TYPE.localDateColumn("$COLUMN_NAME$");$END$" description="Column<LocalDate>" toReformat="false" toShortenFQNames="true">
<variable name="COLUMN_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", COLUMN_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="coldt" value="Column<LocalDateTime> $ATTRIBUTE_NAME$ = TYPE.localDateTimeColumn("$COLUMN_NAME$");$END$" description="Column<LocalDateTime>" toReformat="false" toShortenFQNames="true">
<variable name="COLUMN_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", COLUMN_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="et" value="EntityType TYPE = DOMAIN.entityType("$TABLE_NAME$");$END$" description="EntityType" toReformat="false" toShortenFQNames="true">
<variable name="TABLE_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="cob" value="Column<Boolean> $ATTRIBUTE_NAME$ = TYPE.booleanColumn("$COLUMN_NAME$");$END$" description="Column<Boolean>" toReformat="false" toShortenFQNames="true">
<variable name="COLUMN_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", COLUMN_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="cosh" value="Column<Short> $ATTRIBUTE_NAME$ = TYPE.shortColumn("$COLUMN_NAME$");$END$" description="Column<Short>" toReformat="false" toShortenFQNames="true">
<variable name="COLUMN_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", COLUMN_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="coc" value="Column<Character> $ATTRIBUTE_NAME$ = TYPE.characterColumn("$COLUMN_NAME$");$END$" description="Column<Character>" toReformat="false" toShortenFQNames="true">
<variable name="COLUMN_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", COLUMN_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="coodt" value="Column<OffsetDateTime> $ATTRIBUTE_NAME$ = TYPE.offsetDateTimeColumn("$COLUMN_NAME$");$END$" description="Column<OffsetDateTime>" toReformat="false" toShortenFQNames="true">
<variable name="COLUMN_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", COLUMN_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="coby" value="Column<byte[]> $ATTRIBUTE_NAME$ = TYPE.byteArrayColumn("$COLUMN_NAME$");$END$" description="Column<byte[]>" toReformat="false" toShortenFQNames="true">
<variable name="COLUMN_NAME" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="ATTRIBUTE_NAME" expression="groovyScript("_1.toUpperCase()", COLUMN_NAME)" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
</templateSet>
Available templates
Name |
Template |
et |
EntityType TYPE = DOMAIN.entityType("table_name"); |
fk |
ForeignKey FK_KEY = TYPE.foreignKey("fk_key"); |
cosh |
Column<Short> COLUMN = TYPE.shortColumn("column"); |
coi |
Column<Integer> COLUMN = TYPE.integerColumn("column"); |
col |
Column<Long> COLUMN = TYPE.longColumn("column"); |
cod |
Column<Double> COLUMN = TYPE.doubleColumn("column"); |
cos |
Column<String> COLUMN = TYPE.stringColumn("column"); |
cold |
Column<LocalDate> COLUMN = TYPE.localDateColumn("column"); |
coldt |
Column<LocalDateTime> COLUMN = TYPE.localDateTimeColumn("column"); |
coodt |
Column<OffsetDateTime> COLUMN = TYPE.offsetDateTimeColumn("column"); |
cob |
Column<Boolean> COLUMN = TYPE.booleanColumn("column"); |
coc |
Column<Character> COLUMN = TYPE.characterColumn("column"); |
coby |
Column<byte[]> COLUMN = TYPE.byteArrayColumn("column"); |
9. Internationalization (i18n)
9.1. Overriding
The default i18n strings can be overridden by implementing Resources and registering the implementation with the ServiceLoader.
package is.codion.framework.demos.chinook.domain.impl;
import is.codion.common.resource.Resources;
import is.codion.framework.i18n.FrameworkMessages;
import java.util.Locale;
/**
* Replace the english insert caption/mnemonic Add/A with Insert/I.
*/
public final class ChinookResources implements Resources {
private static final String FRAMEWORK_MESSAGES =
FrameworkMessages.class.getName();
private final boolean english = Locale.getDefault()
.equals(new Locale("en", "EN"));
@Override
public String getString(String baseBundleName, String key, String defaultString) {
if (english && baseBundleName.equals(FRAMEWORK_MESSAGES)) {
return switch (key) {
case "insert" -> "Insert";
case "insert_mnemonic" -> "I";
default -> defaultString;
};
}
return defaultString;
}
}
module is.codion.framework.demos.chinook {
...
provides is.codion.common.resource.Resources
with is.codion.framework.demos.chinook.domain.impl.ChinookResources;
}
See Chinook demo.
9.2. Values
Overview of the available i18n properties files and their keys and values.
9.2.1. codion-common-core
is/codion/common/Operator.java
is/codion/common/Operator.properties
is/codion/common/Operator_is_IS.properties
key | default | is_IS |
---|---|---|
between |
Between |
Innan bils eða jafnt og |
between_exclusive |
Between (exclusive) |
Innan bils |
equal |
Equal |
Jafnt og |
greater_than |
Greater than |
Stærra en |
greater_than_or_equal |
Greater than or equal |
Stærra eða jafnt og |
in |
In |
Í mengi |
less_than |
Less than |
Minna en |
less_than_or_equal |
Less than or equal |
Minna eða jafnt og |
not_between |
Not between |
Utan bils eða jafnt og |
not_between_exclusive |
Not between (exclusive) |
Utan bils |
not_equal |
Not equal |
Ekki jafnt og |
not_in |
Not in |
Ekki í mengi |
9.2.2. codion-common-i18n
is/codion/common/i18n/Messages.java
is/codion/common/i18n/Messages.properties
is/codion/common/i18n/Messages_is_IS.properties
key | default | is_IS |
---|---|---|
cancel |
Cancel |
Hætta við |
cancel_mnemonic |
C |
H |
clear |
Clear |
Hreinsa |
clear_mnemonic |
C |
R |
clear_tip |
Clear all fields |
Hreinsa alla reiti |
copy |
Copy |
Afrita |
error |
Error |
Villa |
find |
Find |
Finna |
login |
Login |
Innskrá |
no |
No |
Nei |
ok |
OK |
Í lagi |
ok_mnemonic |
O |
L |
password |
Password |
Lykilorð |
Prenta |
||
print_mnemonic |
P |
P |
refresh |
Refresh |
Endurhlaða |
refresh_mnemonic |
R |
E |
refresh_tip |
Refresh data |
Endurhlaða gögnum |
search |
Search |
Leita |
username |
Username |
Notendanafn |
yes |
Yes |
Já |
9.2.3. codion-common-model
is/codion/common/model/condition/ConditionModel$Wildcard.java
is/codion/common/model/condition/ConditionModel$Wildcard.properties
is/codion/common/model/condition/ConditionModel$Wildcard_is_IS.properties
key | default | is_IS |
---|---|---|
NONE |
None |
Ekkert |
POSTFIX |
Postfix |
Að aftan |
PREFIX |
Prefix |
Að framan |
PREFIX_AND_POSTFIX |
Prefix and postfix |
Að framan og aftan |
is/codion/common/model/summary/ColumnSummary.java
is/codion/common/model/summary/ColumnSummary.properties
is/codion/common/model/summary/ColumnSummary_is_IS.properties
key | default | is_IS |
---|---|---|
average |
Average |
Meðaltal |
maximum |
Maximum |
Hæsta gildi |
minimum |
Minimum |
Lægsta gildi |
minimum_and_maximum |
Min/max |
Lægsta/hæsta |
none |
None |
Ekkert |
sum |
Sum |
Summa |
9.2.4. codion-common-rmi
is/codion/common/rmi/server/exception/ConnectionNotAvailableException.java
is/codion/common/rmi/server/exception/ConnectionNotAvailableException.properties
is/codion/common/rmi/server/exception/ConnectionNotAvailableException_is_IS.properties
key | default | is_IS |
---|---|---|
connection_not_available |
This server is not accepting more connections |
Þessi þjónn tekur ekki við fleiri tengingum |
9.2.5. codion-dbms-h2
is/codion/dbms/h2/H2Database.java
is/codion/dbms/h2/H2Database.properties
is/codion/dbms/h2/H2Database_is_IS.properties
key | default | is_IS |
---|---|---|
check_constraint_invalid |
The value or values attempted to be entered in a field or fields violate a defined check constraint |
Óleyfilegt gildi |
child_record_error |
This record is referenced by records in other tables, delete those first |
Vísað er í þessa færslu úr öðrum töflum, eyddu þeim færslum fyrst |
integrity_constraint_error |
A foreign key value has no matching primary key value |
Reynt var að vísa í færslu sem ekki er til |
unique_key_error |
This combination of values already exists |
Þessi samsetning gilda er nú þegar til í töflunni |
value_missing |
Value missing |
Gildi vantar |
wrong_user_or_password |
Wrong username or password |
Rangt notendanafn eða lykilorð |
9.2.6. codion-dbms-oracle
is/codion/dbms/oracle/OracleDatabase.java
is/codion/dbms/oracle/OracleDatabase.properties
is/codion/dbms/oracle/OracleDatabase_is_IS.properties
key | default | is_IS |
---|---|---|
check_constraint_error |
The value or values attempted to be entered in a field or fields violate a defined check constraint |
Óleyfilegt gildi |
child_record_error |
This record is referenced by records in other tables, delete those first |
Vísað er í þessa færslu úr öðrum töflum, eyddu þeim færslum fyrst |
integrity_constraint_error |
A foreign key value has no matching primary key value |
Reynt var að vísa í færslu sem ekki er til |
login_credentials_error |
Invalid username or password |
Rangt notendanafn eða lykilorð |
missing_privileges_error |
You are not authorized to perform this action |
Þig vantar réttindi til að framkvæma umbeðna aðgerð |
null_value_error |
An attempt was made to insert or update a required column to NULL |
Ekki er hægt að vista færslu með tómum gildum, tiltaktu öll gildi fyrst |
table_not_found_error |
Table or view does not exist |
Tafla eða view finnst ekki |
unique_key_error |
This combination of values already exists |
Þessi samsetning gilda er nú þegar til í töflunni |
user_cannot_connect |
User does not have session privileges |
Notandi hefur ekki réttindi til að tengjast |
value_missing |
Value missing |
Gildi vantar |
value_too_large_for_column_error |
The value entered is larger than the maximum width defined for the column |
Gildi er of stórt fyrir dálk |
view_has_errors_error |
View has errors |
Villur eru í undirliggjandi sýn (view) |
9.2.7. codion-dbms-postgresql
is/codion/dbms/postgresql/PostgreSQLDatabase.java
is/codion/dbms/postgresql/PostgreSQLDatabase.properties
is/codion/dbms/postgresql/PostgreSQLDatabase_is_IS.properties
key | default | is_IS |
---|---|---|
check_constraint_error |
The value or values attempted to be entered in a field or fields violate a defined check constraint |
Óleyfilegt gildi |
foreign_key_violation |
A foreign key value has no matching primary key value |
Reynt var að vísa í færslu sem ekki er til |
foreign_key_violation_delete |
This record is referenced by records in other tables, delete those first |
Vísað er í þessa færslu úr öðrum töflum, eyddu þeim færslum fyrst |
missing_privileges_error |
You are not authorized to perform this action |
Þig vantar réttindi til að framkvæma umbeðna aðgerð |
null_value_error |
An attempt was made to insert or update a required column to NULL |
Ekki er hægt að vista færslu með tómum gildum, tiltaktu öll gildi fyrst |
unique_key_error |
This combination of values already exists |
Þessi samsetning gilda er nú þegar til í töflunni |
value_missing |
Value missing |
Gildi vantar |
value_too_large_for_column_error |
The value entered is larger than the maximum defined for the column |
Gildi er of stórt fyrir dálk |
9.2.8. codion-framework-db-http
is/codion/framework/db/http/HttpEntityConnection.java
is/codion/framework/db/http/HttpEntityConnection.properties
is/codion/framework/db/http/HttpEntityConnection_is_IS.properties
key | default | is_IS |
---|---|---|
many_records_found |
Many records found when one was expected |
Margar færslur fundust þegar einungis var gert ráð fyrir einni |
record_not_found |
Record not found |
Engin færsla fannst |
9.2.9. codion-framework-db-local
is/codion/framework/db/local/LocalEntityConnection.java
is/codion/framework/db/local/LocalEntityConnection.properties
is/codion/framework/db/local/LocalEntityConnection_is_IS.properties
key | default | is_IS |
---|---|---|
has_been_deleted |
has been deleted |
hefur verið eytt |
multiple_records_found |
Multiple records found when one was expected |
Margar færslur fundust þegar einungis var gert ráð fyrir einni |
record_modified |
This record has been modified |
Þessari færslu hefur verið breytt |
record_not_found |
Record not found |
Engin færsla fannst |
9.2.10. codion-framework-domain
is/codion/framework/domain/entity/DefaultEntityValidator.java
is/codion/framework/domain/entity/DefaultEntityValidator.properties
is/codion/framework/domain/entity/DefaultEntityValidator_is_IS.properties
key | default | is_IS |
---|---|---|
invalid_item_value |
Invalid value |
Ógilt gildi |
value_is_required |
Value for ''{0}'' is required |
Gildi fyrir ''{0}'' vantar |
value_too_large |
value must be equal to or less than |
gildi verður að vera minna eða jafnt og |
value_too_long |
value exceeds allowed length |
gildi má ekki vera lengra en |
value_too_small |
value must be equal to or greater than |
gildi verður að vera stærra eða jafnt og |
is/codion/framework/domain/entity/attribute/AbstractAttributeDefinition.java
is/codion/framework/domain/entity/attribute/AbstractAttributeDefinition.properties
is/codion/framework/domain/entity/attribute/AbstractAttributeDefinition_is_IS.properties
key | default | is_IS |
---|---|---|
invalid_item_suffix |
INVALID |
ÓGILT |
9.2.11. codion-framework-i18n
is/codion/framework/i18n/FrameworkMessages.java
is/codion/framework/i18n/FrameworkMessages.properties
is/codion/framework/i18n/FrameworkMessages_is_IS.properties
key | default | is_IS |
---|---|---|
add |
Add |
Ný færsla |
add_mnemonic |
A |
N |
add_tip |
Add a new record |
Útbúa nýja færslu |
confirm_delete |
Delete {0, choice, 1#record|1<{0, number, integer} records}? |
Eyða {0, choice, 1#færslu|1<{0, number, integer} færslum}? |
confirm_exit |
Are you sure you want to close the application? |
Ertu viss um að þú viljir hætta? |
confirm_exit_title |
Exit? |
Hætta? |
confirm_insert |
Insert record? |
Vista færslu? |
confirm_update |
Update record? |
Uppfæra færslu? |
copy_table_with_header |
Copy Table With Header |
Afrita Töflu Með Dálkaheitum |
delete |
Delete |
Eyða |
delete_current_tip |
Delete current record |
Eyða færslu |
delete_mnemonic |
D |
A |
delete_selected_tip |
Delete selected records |
Eyða völdum færslum |
dependencies |
Dependencies |
Tengdar Færslur |
dependencies_tip |
View records depending on the selected record |
Skoða færslur sem byggja á völdu færslunni |
edit |
Edit |
Breyta |
edit_mnemonic |
E |
B |
edit_selected_tip |
Edit selected records |
Breyta völdum færslum |
exit |
Exit |
Hætta |
exit_mnemonic |
X |
Æ |
exit_tip |
Exit the application |
Hætta í forritinu |
file |
File |
Skrá |
file_mnemonic |
F |
K |
filter_noun |
Filter |
Sýjun |
filter_verb |
Filter |
Sýja |
insert |
Add |
Vista |
insert_mnemonic |
A |
V |
insert_tip |
Add a new record based on the given values |
Vista nýja færslu byggða á innslegnum gildum |
modified_warning |
Unsaved modifications will be lost, continue? |
Óvistaðar breytingar munu tapast, viltu halda áfram? |
modified_warning_title |
Unsaved modifications |
Óvistaðar breytingar |
no_search_results |
Search did not return any results |
Leit skilaði engum niðurstöðum |
save |
Save |
Vista |
save_mnemonic |
S |
V |
search_mnemonic |
S |
T |
search_noun |
Search |
Leit |
search_verb |
Search |
Leita |
select_input_field |
Select input field |
Veldu innsláttarreit |
settings |
Settings |
Stillingar |
support_tables |
Support Tables |
Stoðtöflur |
support_tables_mnemonic |
O |
O |
update |
Update |
Uppfæra |
update_mnemonic |
U |
U |
update_tip |
Update the current record based on the given values |
Uppfæra færslu út frá innslegnum gildum |
view |
View |
Sýn |
view_mnemonic |
V |
N |
9.2.13. codion-swing-common-ui
is/codion/swing/common/ui/SwingMessages.java
is/codion/swing/common/ui/SwingMessages.properties
is/codion/swing/common/ui/SwingMessages_is_IS.properties
key | default | is_IS |
---|---|---|
FileChooser.acceptAllFileFilterText |
All Files |
Allar Skrár |
FileChooser.byDateText |
Date Modified |
Dagsetningu |
FileChooser.byNameText |
Name |
Nafn |
FileChooser.cancelButtonMnemonic |
0 |
0 |
FileChooser.cancelButtonText |
Cancel |
Hætta við |
FileChooser.cancelButtonToolTipText |
Abort file chooser dialog |
Hætta við að velja skrá |
FileChooser.chooseButtonText |
Choose |
Velja |
FileChooser.createButtonText |
Create |
Búa til |
FileChooser.desktopName |
Desktop |
Skjáborð |
FileChooser.detailsViewButtonToolTipText |
Details |
Ýtarlegt |
FileChooser.directoryDescriptionText |
Directory |
Mappa |
FileChooser.directoryOpenButtonMnemonic |
0 |
0 |
FileChooser.directoryOpenButtonText |
Open |
Opna |
FileChooser.directoryOpenButtonToolTipText |
Open selected directory |
Opna valda möppu |
FileChooser.fileDescriptionText |
Generic File |
Almenn Skrá |
FileChooser.fileNameLabelMnemonic |
0 |
0 |
FileChooser.fileNameLabelText |
File: |
Skrá: |
FileChooser.filesOfTypeLabelMnemonic |
0 |
0 |
FileChooser.filesOfTypeLabelText |
File Format: |
Skráarsnið: |
FileChooser.helpButtonMnemonic |
72 |
0 |
FileChooser.helpButtonText |
Help |
Hjálp |
FileChooser.helpButtonToolTipText |
FileChooser help |
Birta hjálp |
FileChooser.homeFolderToolTipText |
Home |
Heim |
FileChooser.listViewButtonToolTipText |
List |
Listi |
FileChooser.lookInLabelMnemonic |
0 |
0 |
FileChooser.lookInLabelText |
Look in |
Leita í |
FileChooser.newFolderButtonText |
New Folder |
Ný Mappa |
FileChooser.newFolderErrorSeparator |
: |
: |
FileChooser.newFolderErrorText |
Error creating new folder |
Villa við að búa til nýja möppu |
FileChooser.newFolderExistsErrorText |
That name is already taken |
Nafnið er þegar í notkun |
FileChooser.newFolderParentDoesntExistText |
Unable to create the folder. The system cannot find the path specified. |
Tókst ekki að búa til möppuna. Slóðin fannst ekki. |
FileChooser.newFolderParentDoesntExistTitleText |
Unable to create folder |
Tókst ekki að búa til nýa möppu |
FileChooser.newFolderPromptText |
Name of new folder: |
Nafn nýrrar möppu: |
FileChooser.newFolderTitleText |
New Folder |
Ný mappa |
FileChooser.newFolderToolTipText |
Create New Folder |
Búa til nýja möppu |
FileChooser.openButtonMnemonic |
0 |
0 |
FileChooser.openButtonText |
Open |
Opna |
FileChooser.openButtonToolTipText |
Open selected file |
Opna valda skrá |
FileChooser.openDialogTitleText |
Open |
Opna |
FileChooser.openTitleText |
Open |
Opna |
FileChooser.saveButtonMnemonic |
0 |
0 |
FileChooser.saveButtonText |
Save |
Vista |
FileChooser.saveButtonToolTipText |
Save selected file |
Vista valda skrá |
FileChooser.saveDialogTitleText |
Save |
Vista |
FileChooser.saveTitleText |
Save |
Vista |
FileChooser.upFolderToolTipText |
Up One Level |
Upp um eitt stig |
FileChooser.updateButtonMnemonic |
85 |
0 |
FileChooser.updateButtonText |
Update |
Uppfæra |
FileChooser.updateButtonToolTipText |
Update directory listing |
Uppfæra skráalista |
OptionPane.inputDialogTitle |
Input |
Inntak |
OptionPane.messageDialogTitle |
Message |
Skilaboð |
is/codion/swing/common/ui/component/calendar/CalendarPanel.java
is/codion/swing/common/ui/component/calendar/CalendarPanel.properties
is/codion/swing/common/ui/component/calendar/CalendarPanel_is_IS.properties
key | default | is_IS |
---|---|---|
today |
Today |
Í dag |
today_mnemonic |
T |
D |
is/codion/swing/common/ui/component/table/ColumnConditionPanel.java
is/codion/swing/common/ui/component/table/ColumnConditionPanel.properties
is/codion/swing/common/ui/component/table/ColumnConditionPanel_is_IS.properties
key | default | is_IS |
---|---|---|
auto_enable |
Auto-enable |
Virkja sjálfkrafa |
case_sensitive |
Case-sensitive |
Hástafanæmni |
wildcard |
Wildcard |
Algildi |
is/codion/swing/common/ui/component/table/ColumnSelectionPanel.java
is/codion/swing/common/ui/component/table/ColumnSelectionPanel.properties
is/codion/swing/common/ui/component/table/ColumnSelectionPanel_is_IS.properties
key | default | is_IS |
---|---|---|
select_all |
All |
Alla |
select_all_mnemonic |
A |
A |
select_none |
None |
Engan |
select_none_mnemonic |
N |
E |
is/codion/swing/common/ui/component/table/FilterTable.java
is/codion/swing/common/ui/component/table/FilterTable.properties
is/codion/swing/common/ui/component/table/FilterTable_is_IS.properties
key | default | is_IS |
---|---|---|
auto_resize |
Auto-resize |
Stærðarjafna |
case_sensitive_search |
Case-sensitive |
Hástafanæmni |
copy_cell |
Copy Cell |
Afrita Reit |
regular_expression_search |
Regular expression search |
Leita með reglulegum segðum |
reset |
Reset |
Frumstilla |
reset_columns_description |
Reset columns to their original location |
Frumstilla dálka í upphaflega stöðu |
resize_all_columns |
All columns |
Alla dálka |
resize_last_column |
Last column |
Aftasta dálk |
resize_next_column |
Next column |
Næsta dálk |
resize_off |
Off |
Slökkt |
resize_subsequent_columns |
Subsequent columns |
Aftari dálka |
select |
Select |
Velja |
select_columns |
Select columns |
Velja dálka |
single_selection_mode |
Single selection |
Einnar línu val |
is/codion/swing/common/ui/component/table/TableConditionPanel.java
is/codion/swing/common/ui/component/table/TableConditionPanel.properties
is/codion/swing/common/ui/component/table/TableConditionPanel_is_IS.properties
key | default | is_IS |
---|---|---|
advanced |
Advanced |
Nákvæm |
hidden |
Hidden |
Falin |
select_condition |
Select condition |
Veldu leitarreit |
simple |
Simple |
Einföld |
is/codion/swing/common/ui/component/text/NumberDocument$NumberParsingDocumentFilter.java
is/codion/swing/common/ui/component/text/NumberDocument$NumberParsingDocumentFilter.properties
is/codion/swing/common/ui/component/text/NumberDocument$NumberParsingDocumentFilter_is_IS.properties
key | default | is_IS |
---|---|---|
value_outside_range |
Value outside allowed range |
Gildi utan leyfilegs bils |
is/codion/swing/common/ui/component/text/SearchHighlighter.java
is/codion/swing/common/ui/component/text/SearchHighlighter.properties
is/codion/swing/common/ui/component/text/SearchHighlighter_is_IS.properties
key | default | is_IS |
---|---|---|
case_sensitive |
Case-sensitive |
Hástafanæmni |
is/codion/swing/common/ui/component/text/StringLengthValidator.java
is/codion/swing/common/ui/component/text/StringLengthValidator.properties
is/codion/swing/common/ui/component/text/StringLengthValidator_is_IS.properties
key | default | is_IS |
---|---|---|
length_exceeds_maximum |
Text length may not exceed |
Texti má ekki vera lengri en |
is/codion/swing/common/ui/component/text/TemporalField.java
is/codion/swing/common/ui/component/text/TemporalField.properties
is/codion/swing/common/ui/component/text/TemporalField_is_IS.properties
key | default | is_IS |
---|---|---|
display_calendar |
Display calendar |
Birta dagatal |
is/codion/swing/common/ui/component/text/TextFieldPanel.java
is/codion/swing/common/ui/component/text/TextFieldPanel.properties
is/codion/swing/common/ui/component/text/TextFieldPanel_is_IS.properties
key | default | is_IS |
---|---|---|
show_input_dialog |
Show larger input field |
Sýna stærri innsláttarreit |
is/codion/swing/common/ui/dialog/DefaultCalendarDialogBuilder.java
is/codion/swing/common/ui/dialog/DefaultCalendarDialogBuilder.properties
is/codion/swing/common/ui/dialog/DefaultCalendarDialogBuilder_is_IS.properties
key | default | is_IS |
---|---|---|
select_date |
Select a date |
Veldu dagsetningu |
select_date_time |
Select a date and time |
Veldu dagsetningu og tíma |
is/codion/swing/common/ui/dialog/DefaultExceptionDialogBuilder.java
is/codion/swing/common/ui/dialog/DefaultExceptionDialogBuilder.properties
is/codion/swing/common/ui/dialog/DefaultExceptionDialogBuilder_is_IS.properties
key | default | is_IS |
---|---|---|
file_not_found |
File not found |
Skrá fannst ekki |
is/codion/swing/common/ui/dialog/DefaultFileSelectionDialogBuilder.java
is/codion/swing/common/ui/dialog/DefaultFileSelectionDialogBuilder.properties
is/codion/swing/common/ui/dialog/DefaultFileSelectionDialogBuilder_is_IS.properties
key | default | is_IS |
---|---|---|
file_exists |
File with the same name exists |
Skrá er til |
overwrite_file |
Overwrite file? |
Yfirskrifa skrá? |
select_directories |
Select directories |
Veldu möppur |
select_directory |
Select directory |
Veldu möppu |
select_file |
Select file |
Veldu skrá |
select_file_or_directory |
Select file or directory |
Veldu skrá eða möppu |
select_files |
Select files |
Veldu skrár |
select_files_or_directories |
Select files or directories |
Veldu skrár eða möppur |
is/codion/swing/common/ui/dialog/DefaultFontSizeSelectionDialogBuilder.java
is/codion/swing/common/ui/dialog/DefaultFontSizeSelectionDialogBuilder.properties
is/codion/swing/common/ui/dialog/DefaultFontSizeSelectionDialogBuilder_is_IS.properties
key | default | is_IS |
---|---|---|
select_font_size |
Select Font Size |
Velja Leturstærð |
is/codion/swing/common/ui/dialog/DefaultSelectionDialogBuilder.java
is/codion/swing/common/ui/dialog/DefaultSelectionDialogBuilder.properties
is/codion/swing/common/ui/dialog/DefaultSelectionDialogBuilder_is_IS.properties
key | default | is_IS |
---|---|---|
select_value |
Select value |
Veldu gildi |
select_values |
Select values |
Veldu gildi |
is/codion/swing/common/ui/dialog/ExceptionPanel.java
is/codion/swing/common/ui/dialog/ExceptionPanel.properties
is/codion/swing/common/ui/dialog/ExceptionPanel_is_IS.properties
key | default | is_IS |
---|---|---|
close |
Close |
Loka |
close_dialog |
Close this dialog |
Loka glugga |
close_mnemonic |
C |
L |
copy_mnemonic |
C |
A |
copy_to_clipboard |
Copy text to clipboard |
Afrita texta á klippiborð |
details |
Details |
Meira |
print_error_report |
Print an error report |
Prenta upplýsingar um villu |
print_error_report_mnemonic |
P |
P |
save |
Save |
Vista |
save_error_log |
Save error log |
Vista upplýsingar um villu |
save_mnemonic |
S |
S |
show_details |
Show details |
Sýna meira |
9.2.14. codion-swing-framework-ui
is/codion/swing/framework/ui/DefaultEntityApplicationPanelBuilder.java
is/codion/swing/framework/ui/DefaultEntityApplicationPanelBuilder.properties
is/codion/swing/framework/ui/DefaultEntityApplicationPanelBuilder_is_IS.properties
key | default | is_IS |
---|---|---|
initializing |
Initializing |
Frumstilli |
is/codion/swing/framework/ui/EntityApplicationPanel.java
is/codion/swing/framework/ui/EntityApplicationPanel.properties
is/codion/swing/framework/ui/EntityApplicationPanel_is_IS.properties
key | default | is_IS |
---|---|---|
about |
About |
Um Forritið |
always_on_top |
Always on Top |
Alltaf Ofan á |
application_version |
Application Version |
Kerfisútgáfa |
codion_version |
Codion Version |
Codion Útgáfa |
font_size_selected_message |
The selected font size will be activated on next application start |
Valin leturstærð virkjast við næstu ræsingu |
help |
Help |
Hjálp |
help_mnemonic |
H |
H |
keyboard_shortcuts |
Keyboard shortcuts |
Flýtilyklar |
log |
Log |
Loggur |
log_level |
Level |
Nákvæmni |
log_level_desc |
Set the logging level for the application |
Stilla nákvæmni logs |
log_mnemonic |
L |
L |
memory_usage |
Memory Usage |
Minnisnotkun |
open_log |
Open Log |
Opna Log |
open_log_file |
File |
Skrá |
open_log_folder |
Folder |
Möppu |
tools |
Tools |
Tól |
tools_mnemonic |
T |
T |
view_application_tree |
Application Tree |
Yfirlitsmynd |
is/codion/swing/framework/ui/EntityEditPanel.java
is/codion/swing/framework/ui/EntityEditPanel.properties
is/codion/swing/framework/ui/EntityEditPanel_is_IS.properties
key | default | is_IS |
---|---|---|
deleting |
Deleting |
Eyði |
inserting |
Inserting |
Vista |
no_dependencies |
This record has no dependent records |
Færslan á sér engar tengdar færslur |
no_dependencies_title |
No dependencies |
Engar tengdar færslur |
unknown_dependent_records |
This record has unknown dependencies |
Færslan á sér óþekktar tengdar færslur |
updating |
Updating |
Uppfæri |
is/codion/swing/framework/ui/EntityPanel.java
is/codion/swing/framework/ui/EntityPanel.properties
is/codion/swing/framework/ui/EntityPanel_is_IS.properties
key | default | is_IS |
---|---|---|
toggle_edit |
Toggle between edit views |
Skipta á milli sýna á innsláttarsvæði |
is/codion/swing/framework/ui/EntityTablePanel.java
is/codion/swing/framework/ui/EntityTablePanel.properties
is/codion/swing/framework/ui/EntityTablePanel_is_IS.properties
key | default | is_IS |
---|---|---|
clear_selection_tip |
Clear selection |
Hreinsa val |
columns |
Columns |
Dálkar |
delete_dependent_records |
Delete these dependent records first |
Eyddu þessum tengdu færslum fyrst |
filtered |
filtered |
sýjaðar |
limited_to |
Limited to |
Takmarkað við |
refreshing |
Refreshing |
Endurhleð |
require_query_condition |
Search Condition Required |
Krefjast Leitarskilyrðis |
require_query_condition_description |
One or more active search conditions required for displaying data |
Eins eða fleiri leitarskilyrða krafist til að sækja gögn |
row_limit |
Row limit |
Fjöldatakmörkun |
selected |
selected |
valdar |
selection_down_tip |
Move selection down |
Færa val niður |
selection_up_tip |
Move selection up |
Færa val upp |
show_condition_panel |
Show Condition Panel |
Sýna Leitarflöt |
show_filter_panel |
Show Filter Panel |
Sýna Sýjunarflöt |
toggle_summary_tip |
Toggle Summary View |
Sýna/fela samantekt |
is/codion/swing/framework/ui/KeyboardShortcutsPanel.java
is/codion/swing/framework/ui/KeyboardShortcutsPanel.properties
is/codion/swing/framework/ui/KeyboardShortcutsPanel_is_IS.properties
key | default | is_IS |
---|---|---|
add |
Add |
Ný færsla |
add_new_item |
Add new item |
Bæta við nýrri færslu |
calendar |
Calendar |
Dagatal |
condition_panel |
Table condition panel |
Leitarflötur |
copy_selected_cell |
Copy selected cell to clipboard |
Afrita valinn reit á klippiborð |
copy_selected_rows |
Copy selected rows to clipboard |
Afrita valdar línur á klippiborð |
date_time_field |
Date/time field |
Dagsetning/tíma reitur |
delete |
Delete |
Eyða |
delete_selected |
Delete selected |
Eyða völdum |
display_calendar |
Display calendar |
Birta dagatal |
display_input_dialog |
Display multi-line input dialog |
Birta innsláttarreit með fleiri línum |
edit_panel |
Edit panel |
Innsláttarflötur |
edit_selected_item |
Edit selected item |
Breyta valinni færslu |
edit_value |
Edit value |
Breyta gildi |
enable_disable_condition |
Enable/disable column condition |
Virkja/afvirkja leitarreit dálks |
entity_field |
Entity field (combo box or search field) with a new item or edit item control |
Færslureitur (flettilisti eða leitarreitur) með aðgerð til að búa til nýja eða breyta færslu |
expand_collapse |
Expand/collapse |
Stækka/minnka alveg |
find_and_select_next |
Find and select next |
Finna og velja næstu |
find_and_select_previous |
Find and select previous |
Finna og velja síðustu |
find_next |
Find next |
Finna næstu |
find_previous |
Find previous |
Finna síðustu |
increment_decrement |
Increment/decrement based to cursor position |
Hækka/læækka út frá staðsetningu bendils |
move_focus_to_table |
Move focus to table |
Færa fókus í töflu |
move_selected_column |
Move selected column |
Færa valinn dálk |
move_selection |
Move selection |
Færa val |
navigate_left_right |
Navigate left/right |
Flakka hægri/vinstri |
navigate_up_down |
Navigate up/down |
Flakka upp/niður |
navigation |
Navigation |
Flakk |
previous_next_day |
Previous/next day |
Fyrri/næsti dagur |
previous_next_hour |
Previous/next hour |
Fyrri/næsta klukkustund |
previous_next_minute |
Previous/next minute |
Fyrri/næsta mínúta |
previous_next_month |
Previous/next month |
Fyrri/næsti mánuður |
previous_next_operator |
Previous/next search operator |
Fyrri/næsta leitartýpa |
previous_next_week |
Previous/next week |
Fyrri/næsta vika |
previous_next_year |
Previous/next year |
Fyrra/næsta ár |
Print (if printing is available) |
Prenta (ef prentun er til staðar) |
|
refresh |
Refresh |
Endurhlaða |
refresh_button |
Refresh, when condition panel is visible and button enabled |
Endurhlaða, þegar leitarflötur er sýnilegur og hnappur virkur |
refresh_table_data |
Refresh table data |
Endurhlaða gögnum |
resize_left_right |
Resize left/right |
Stækka/minnka |
resize_selected_column |
Resize selected column |
Breyta stærð á völdum dálk |
resizing |
Resizing |
Stærð |
save |
Save |
Vista |
select_condition_panel |
Select a condition panel |
Velja leitarflöt |
select_filter_panel |
Select a filter panel |
Velja sýjunarflöt |
show_popup_menu |
Show popup menu |
Birta valmynd |
table_panel |
Table panel |
Tafla |
table_search_field |
Table search field |
Töfluleitarreitur |
text_field_panel |
Text field panel |
Textainnsláttarflötur |
toggle_column_sort |
Toggle sorting by selected column |
Raða út frá völdum dálk |
toggle_column_sort_add |
Toggle and add sorting by selected column |
Bæta við röðun út frá völdum dálk |
toggle_condition_panel |
Toggle condition panel view, between hidden, visible and advanced |
Skipta á milli sýna á leitarfleti, falinn, sjáanlegur og nákvæmur |
toggle_edit_panel |
Toggle edit panel |
Fela/birta innsláttarflöt |
toggle_filter_panel |
Toggle filter panel view, between hidden, visible and advanced |
Skipta á milli sýna á sýjunarfleti, falinn, sjáanlegur og nákvæmur |
transfer_focus |
Transfer focus |
Færa fókus |
transfer_focus_edit_panel |
Edit panel |
Innsláttarflötur |
transfer_focus_find_in_table |
Find in table field |
Leita í töflu |
transfer_focus_input_field |
Input field |
Innsláttarreitur |
transfer_focus_search_field |
Search field |
Leitarreitur |
transfer_focus_table |
Table |
Tafla |
transfer_focus_to_next_input_field |
Transfer focus to next input field |
Færa fókus í næsta innsláttarreit |
transfer_focus_to_previous_input_field |
Transfer focus to previous input field |
Færa fókus í síðasta innsláttarreit |
update |
Update |
Uppfæra |
is/codion/swing/framework/ui/TabbedDetailLayout.java
is/codion/swing/framework/ui/TabbedDetailLayout.properties
is/codion/swing/framework/ui/TabbedDetailLayout_is_IS.properties
key | default | is_IS |
---|---|---|
detail_tables |
Detail Tables |
Undirtöflur |
toggle_detail |
Toggle between detail views |
Skipta á milli sýna á undirtöflur |
is/codion/swing/framework/ui/component/EntityControls.java
is/codion/swing/framework/ui/component/EntityControls.properties
is/codion/swing/framework/ui/component/EntityControls_is_IS.properties
key | default | is_IS |
---|---|---|
add_new |
Add new item |
Skrá nýja færslu |
edit_selected |
Edit selected item |
Breyta valinni færslu |
is/codion/swing/framework/ui/component/EntitySearchField.java
is/codion/swing/framework/ui/component/EntitySearchField.properties
is/codion/swing/framework/ui/component/EntitySearchField_is_IS.properties
key | default | is_IS |
---|---|---|
case_sensitive |
Case-sensitive |
Hástafanæmni |
multiple_item_separator |
Multiple item separator |
Tákn sem aðgreinir færslur |
postfix_wildcard |
Auto-postfix wildcard |
Sjálfkrafa algildi fyrir aftan |
prefix_wildcard |
Auto-prefix wildcard |
Sjálfkrafa algildi fyrir framan |
result_limit |
Result limit |
Fjöldatakmörkun |
result_limited |
Result limited to {0, choice, 1#record|1<{0, number, integer} records} |
Niðurstöður takmarkaðar við {0, choice, 1#færslu|1<{0, number, integer} færslur} |
search_columns |
Search columns |
Leitardálkar |
searching |
Searching |
Leita |
select_entity |
Select record |
Veldu færslu |
space_as_wildcard |
Space as wildcard |
Stafabil sem algildi |