4 post(s) tagged with "java"

View All Tags

Java with GraphQL

May 21, 2018

JraphQL

Java with GraphQL

ModuleDescription
jraphql-langGraphQL language representation
jraphql-runtimeGraphQL execution engine
jraphql-parser-antlrParser written in Antlr4 parse to jraphql-lang

Get Started

<dependency>
<groupId>me.wener.jraphql</groupId>
<artifactId>jraphql-runtimer</artifactId>
<version>0.0.6</version>
</dependency>
<dependency>
<groupId>me.wener.jraphql</groupId>
<artifactId>jraphql-parser-antlr</artifactId>
<version>0.0.6</version>
</dependency>

Features

Language representation

FeatureDescription
Serializablecan parse or stringify to or from JSON
Immutablefriendly to cache or precompile
Buildableevery type has a builder for it generated by lombok.
Pluggablelanguage representation is not related to parser impl

Syntax Extension

Add extend by name syntax for object and interface

Weave multi schemas

# common.graphqls
scalar Version
# crm.graphqls
type CrmQuery {
customer(id:ID!):Customer
crmVersion: Version!
}
type CrmUser {
customers: [Customer]
}
extend type Query by CrmQuery
extend type User by CrmUser
# erp.graphqls
type ErpQuery {
product(id:ID!):Product
}
extend type Query by ErpQuery

Conditional schema

# Only admin can see and use these methods
type AdminMutation {
changePassword(id:ID,password:String): ChangePasswordPayload
}
extend type Mutation by AdminMutation @Role(role:"admin")

Allowed directives on directive definition, add DIRECTIVE location

directive @JavaType(type:String) on DIRECTIVE
directive @Auth(value:String) @JavaType(type:"Auth") on FIELD_DEFINITION;

Allowed schema has optional name

schema Test {
query: MyQuery
}

Runtime Extension

  1. Type implements interface don't need to write the fields again.
interface Node {
id: ID!
}
type User implements Node {
# id: ID! # This is optional
}
  1. Can disable introspection
    • new MetaResolver().setDisableIntrospection(true)

Embeddable Schema

JraphQL Runtime contain a embedded schema MetaSchema, generated by EmbededSchema.

  • Parse Schema
  • Serialize to JSON
  • Best compress GZip
  • Encode use mime base64
  • Original JSON 32631 byte -> Encoded Base64 5352 byte

Example

StarWar

Queries you can try

mutation addRev {
createReview(episode: EMPIRE, review: {stars: 4, commentary: "Ok Good"}) {
stars
commentary
}
}
query rev($e:Episode = EMPIRE) {
hero(episode: $e) {
id
name
appearsIn
}
reviews(episode: $e) {
stars
commentary
}
}
query search {
search(text: "o") {
__typename
... on Human {
id
name
}
... on Droid {
primaryFunction
}
... on Starship {
length
}
}
}
query baseQuery {
starship(id: "3000") {
id
name
length(unit: FOOT)
}
character(id: "2000") {
id
... on Human {
mass
starships {
name
}
}
... on Droid {
name
appearsIn
}
}
human(id: "1003") {
friendsConnection(after: "1002") {
friends {
name
}
pageInfo {
hasNextPage
startCursor
endCursor
}
}
friends {
name
}
}
}

Work with GoaphQL

GoaphQL can generate code from schema that depends on jrapgql-api, can directly run on jraphql-graphql-java-adapter.

The generated code is static type and full featured, everything is an interface.

俄罗斯方块

August 12, 2013

俄罗斯方块/GTetris

简单的俄罗斯方块, java swing 实现

截图/Screenshot

GTetris screenschot

GTetris screenschot

游戏特色/Features

  • 可操控,当前最多可三个玩家同时操作
  • 可保存

按键/Shortcuts

Esc: 暂停

1: 保存

2: 加载

4: 加入玩家

第一个玩家 w,a,s,d

第二个玩家 i,j,k,l

第三个玩家 上下左右

Thanks

字体 Slice

字体 Visitor

lombok

commons-io

TODO

  • 添加声音
  • 实现播放功能

作者/Author

作者: wener

微博: @小小文小小爱

博客: http://blog.wener.me