SlideShare una empresa de Scribd logo
1 de 29
Software Installation
•   Unzip the Eclipse distribution matching your OS
    Windows users: Use a location close to the root directory

•   Run the Eclipse executable

•   Choose File -> Import -> Existing projects into workspace

•   Select Archive file and choose workspace.zip from the USB
    stick
Domain-specific Languages
With
Eclipse Modeling
Jan Köhnlein, Karsten Thoms
Markus Völter, Sebastian Zarnekow
itemis AG
Karsten Thoms    Sebastian Zarnekow



                                 Jan Köhnlein
       Markus Voelter
Karsten Thoms    Sebastian Zarnekow



                                 Jan Köhnlein
       Markus Voelter
Domain-specific Language
        (DSL)
Domain-specific Language
         (DSL)

 a formal, processable language
targeting at a specific viewpoint
     or aspect of a system.
Example: JPA
@Entity
public class Customer implements Serializable {
  private Long id;
  private String name;
  private Address address;
  private Collection<Order> orders = new HashSet<Order>();
  private Set<PhoneNumber> phones = new HashSet<PhoneNumber>();

    public Customer() {}
    @Id
    public Long getId() {
      return id;
    }
    public void setId(Long id) {
      this.id = id;
    }
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public Address getAddress() {
      return address;
    }
    public void setAddress(Address address) {
      this.address = address;
    }
    @OneToMany
    public Collection<Order> getOrders() {
      return orders;
    }
    public void setOrders(Collection<Order> orders) {
      this.orders = orders;
    }
    @ManyToMany
    public Set<PhoneNumber> getPhones() {
      return phones;
    }
    public void setPhones(Set<PhoneNumber> phones) {
      this.phones = phones;
    }
}
@Entity
public class Customer implements Serializable {
  private Long id;
  private String name;
  private Address address;
  private Collection<Order> orders = new HashSet<Order>();
  private Set<PhoneNumber> phones = new HashSet<PhoneNumber>();

    public Customer() {}
    @Id
    public Long getId() {
      return id;
    }
    public void setId(Long id) {
      this.id = id;
    }
    public String getName() {
      return name;
    }                                                             entity Customer {
    public void setName(String name) {
      this.name = name;
                                                                      String name
    }                                                                 Address address
    public Address getAddress() {
      return address;                                                 Order* orders
    }
    public void setAddress(Address address) {
                                                                      PhoneNumber** phones
      this.address = address;                                     }
    }
    @OneToMany
    public Collection<Order> getOrders() {
      return orders;
    }
    public void setOrders(Collection<Order> orders) {
      this.orders = orders;
    }
    @ManyToMany
    public Set<PhoneNumber> getPhones() {
      return phones;
    }
    public void setPhones(Set<PhoneNumber> phones) {
      this.phones = phones;
    }
}
Abstraction
The right tool
           for
 the right job
MWE
Xpand
G
 ra
      m
       m
           ar
Reference




                    ar
 Model




                 m
                m
            ra
            G
Reference




                    ar
 Model




                 m
                m
            ra
            G
Reference




                           ar
 Model




                        m
                       m
                   ra
                   G
            DSL Workbench
Reference




                           ar
 Model




                        m
                       m
                   ra
                   G
            DSL Workbench


   Editor
Reference




                            ar
 Model




                          m
                        m
                     ra
                    G
            DSL Workbench


   Editor        Infrastucture
Reference




                            ar
 Model




                          m
                        m
                     ra
                    G
            DSL Workbench


   Editor        Infrastucture   Generator
Editor




         Generator
Editor




   AST

         Generator
Editor




            AST                  TeX Xpa
                               T ma  p
                             TeXeXpa p n nd
                                  m l
                                 p
                           Te m a p n ad
                             m pln lad te
                               pl ad te
                                  at te
                                    e

Generator
Editor




            AST                  TeX Xpa
                               T ma  p
                             TeXeXpa p n nd
                                  m l
                                 p
                           Te m a p n ad
                             m pln lad te
                               pl ad te
                                  at te
                                    e

Generator
Editor




                      AST                        TeX Xpa
                                               T ma  p
                                             TeXeXpa p n nd
                                                  m l
                                                 p
                                           Te m a p n ad
                                             m pln lad te
                                               pl ad te
                                                  at te
                                                    e

Generator




                   E
                 Ex xe
              Ex A c
                    r
            Ex Ae etcu uta
             Aecrtcuifata bl
            A rti uifata ctbl e
             rt fata ctb e
               ifa c b le
                  ct t le
Showtime
Generation Gap
    Pattern
      BaseClass
     baseMethod()
                          framework
                          manually written



AbstractGeneratedClass
generatedMethod()         generated



ConcreteCustomizedClass
overriddenMethod()
                          generated once
additionalMethod()        modified manually
Questions?

   find out more at
 http://www.xtext.org

Más contenido relacionado

La actualidad más candente

Type header file in c++ and its function
Type header file in c++ and its functionType header file in c++ and its function
Type header file in c++ and its function
Frankie Jones
 
C - aptitude3
C - aptitude3C - aptitude3
C - aptitude3
Srikanth
 

La actualidad más candente (20)

Introduction to ad-3.4, an automatic differentiation library in Haskell
Introduction to ad-3.4, an automatic differentiation library in HaskellIntroduction to ad-3.4, an automatic differentiation library in Haskell
Introduction to ad-3.4, an automatic differentiation library in Haskell
 
Introduction to numpy
Introduction to numpyIntroduction to numpy
Introduction to numpy
 
Scientific Computing with Python - NumPy | WeiYuan
Scientific Computing with Python - NumPy | WeiYuanScientific Computing with Python - NumPy | WeiYuan
Scientific Computing with Python - NumPy | WeiYuan
 
Statistical inference for (Python) Data Analysis. An introduction.
Statistical inference for (Python) Data Analysis. An introduction.Statistical inference for (Python) Data Analysis. An introduction.
Statistical inference for (Python) Data Analysis. An introduction.
 
Phil Bartie QGIS PLPython
Phil Bartie QGIS PLPythonPhil Bartie QGIS PLPython
Phil Bartie QGIS PLPython
 
C Assignment Help
C Assignment HelpC Assignment Help
C Assignment Help
 
Type header file in c++ and its function
Type header file in c++ and its functionType header file in c++ and its function
Type header file in c++ and its function
 
Code Generation
Code GenerationCode Generation
Code Generation
 
C Programming Homework Help
C Programming Homework HelpC Programming Homework Help
C Programming Homework Help
 
C - aptitude3
C - aptitude3C - aptitude3
C - aptitude3
 
Lecture1 classes1
Lecture1 classes1Lecture1 classes1
Lecture1 classes1
 
Big picture of category theory in scala with deep dive into contravariant and...
Big picture of category theory in scala with deep dive into contravariant and...Big picture of category theory in scala with deep dive into contravariant and...
Big picture of category theory in scala with deep dive into contravariant and...
 
NumPy Refresher
NumPy RefresherNumPy Refresher
NumPy Refresher
 
150970116028 2140705
150970116028 2140705150970116028 2140705
150970116028 2140705
 
GeoGebra JavaScript CheatSheet
GeoGebra JavaScript CheatSheetGeoGebra JavaScript CheatSheet
GeoGebra JavaScript CheatSheet
 
Coroutine
CoroutineCoroutine
Coroutine
 
.Net 4.0 Threading and Parallel Programming
.Net 4.0 Threading and Parallel Programming.Net 4.0 Threading and Parallel Programming
.Net 4.0 Threading and Parallel Programming
 
Python intro ch_e_comp
Python intro ch_e_compPython intro ch_e_comp
Python intro ch_e_comp
 
Python NumPy Tutorial | NumPy Array | Edureka
Python NumPy Tutorial | NumPy Array | EdurekaPython NumPy Tutorial | NumPy Array | Edureka
Python NumPy Tutorial | NumPy Array | Edureka
 
Function
FunctionFunction
Function
 

Similar a Domain Specific Languages With Eclipse Modeling

Linq Sanjay Vyas
Linq   Sanjay VyasLinq   Sanjay Vyas
Linq Sanjay Vyas
rsnarayanan
 
MDSD with Eclipse @ JUG Hamburg
MDSD with Eclipse @ JUG HamburgMDSD with Eclipse @ JUG Hamburg
MDSD with Eclipse @ JUG Hamburg
Sebastian Zarnekow
 
Java: Regular Expression
Java: Regular ExpressionJava: Regular Expression
Java: Regular Expression
Masudul Haque
 
Perl.predefined.variables
Perl.predefined.variablesPerl.predefined.variables
Perl.predefined.variables
King Hom
 
Unit 4
Unit 4Unit 4
Unit 4
siddr
 

Similar a Domain Specific Languages With Eclipse Modeling (20)

Domänenspezifische Sprachen mit Xtext
Domänenspezifische Sprachen mit XtextDomänenspezifische Sprachen mit Xtext
Domänenspezifische Sprachen mit Xtext
 
Basic concept of MATLAB.ppt
Basic concept of MATLAB.pptBasic concept of MATLAB.ppt
Basic concept of MATLAB.ppt
 
Linq Sanjay Vyas
Linq   Sanjay VyasLinq   Sanjay Vyas
Linq Sanjay Vyas
 
MDSD with Eclipse @ JUG Hamburg
MDSD with Eclipse @ JUG HamburgMDSD with Eclipse @ JUG Hamburg
MDSD with Eclipse @ JUG Hamburg
 
Advanced procedures in assembly language Full chapter ppt
Advanced procedures in assembly language Full chapter pptAdvanced procedures in assembly language Full chapter ppt
Advanced procedures in assembly language Full chapter ppt
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.
 
C++11 - A Change in Style - v2.0
C++11 - A Change in Style - v2.0C++11 - A Change in Style - v2.0
C++11 - A Change in Style - v2.0
 
Java: Regular Expression
Java: Regular ExpressionJava: Regular Expression
Java: Regular Expression
 
ANSI C REFERENCE CARD
ANSI C REFERENCE CARDANSI C REFERENCE CARD
ANSI C REFERENCE CARD
 
Perl.predefined.variables
Perl.predefined.variablesPerl.predefined.variables
Perl.predefined.variables
 
GraphFrames Access Methods in DSE Graph
GraphFrames Access Methods in DSE GraphGraphFrames Access Methods in DSE Graph
GraphFrames Access Methods in DSE Graph
 
La tex basics
La tex basicsLa tex basics
La tex basics
 
Java gets a closure
Java gets a closureJava gets a closure
Java gets a closure
 
Java 8 by example!
Java 8 by example!Java 8 by example!
Java 8 by example!
 
Let Us Learn Lambda Using C# 3.0
Let Us Learn Lambda Using C# 3.0Let Us Learn Lambda Using C# 3.0
Let Us Learn Lambda Using C# 3.0
 
Stata Programming Cheat Sheet
Stata Programming Cheat SheetStata Programming Cheat Sheet
Stata Programming Cheat Sheet
 
01 stack 20160908_jintaek_seo
01 stack 20160908_jintaek_seo01 stack 20160908_jintaek_seo
01 stack 20160908_jintaek_seo
 
Unit 4
Unit 4Unit 4
Unit 4
 
Mastering Grammars with PetitParser
Mastering Grammars with PetitParserMastering Grammars with PetitParser
Mastering Grammars with PetitParser
 
C standard library functions
C standard library functionsC standard library functions
C standard library functions
 

Más de Dr. Jan Köhnlein

A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editing
Dr. Jan Köhnlein
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editing
Dr. Jan Köhnlein
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editing
Dr. Jan Köhnlein
 

Más de Dr. Jan Köhnlein (20)

The Eclipse Layout Kernel sirius con 2017
The Eclipse Layout Kernel   sirius con 2017The Eclipse Layout Kernel   sirius con 2017
The Eclipse Layout Kernel sirius con 2017
 
A New Approach Towards Web-based IDEs
A New Approach Towards Web-based IDEsA New Approach Towards Web-based IDEs
A New Approach Towards Web-based IDEs
 
Responsiveness
ResponsivenessResponsiveness
Responsiveness
 
Getting rid of backtracking
Getting rid of backtrackingGetting rid of backtracking
Getting rid of backtracking
 
Graphical Views For Xtext With FXDiagram
Graphical Views For Xtext With FXDiagramGraphical Views For Xtext With FXDiagram
Graphical Views For Xtext With FXDiagram
 
XRobots
XRobotsXRobots
XRobots
 
Diagrams, Xtext and UX
Diagrams, Xtext and UXDiagrams, Xtext and UX
Diagrams, Xtext and UX
 
Scoping
ScopingScoping
Scoping
 
Xtext, diagrams and ux
Xtext, diagrams and uxXtext, diagrams and ux
Xtext, diagrams and ux
 
Diagram Editors - The FXed Generation
Diagram Editors - The FXed GenerationDiagram Editors - The FXed Generation
Diagram Editors - The FXed Generation
 
Code Generation With Xtend
Code Generation With XtendCode Generation With Xtend
Code Generation With Xtend
 
Graphical Views For Xtext
Graphical Views For XtextGraphical Views For Xtext
Graphical Views For Xtext
 
The Xtext Grammar Language
The Xtext Grammar LanguageThe Xtext Grammar Language
The Xtext Grammar Language
 
Eclipse Diagram Editors - An Endangered Species
Eclipse Diagram Editors - An Endangered SpeciesEclipse Diagram Editors - An Endangered Species
Eclipse Diagram Editors - An Endangered Species
 
Java DSLs with Xtext
Java DSLs with XtextJava DSLs with Xtext
Java DSLs with Xtext
 
DSLs for Java Developers
DSLs for Java DevelopersDSLs for Java Developers
DSLs for Java Developers
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editing
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editing
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editing
 
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Último (20)

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 

Domain Specific Languages With Eclipse Modeling

  • 1. Software Installation • Unzip the Eclipse distribution matching your OS Windows users: Use a location close to the root directory • Run the Eclipse executable • Choose File -> Import -> Existing projects into workspace • Select Archive file and choose workspace.zip from the USB stick
  • 2. Domain-specific Languages With Eclipse Modeling Jan Köhnlein, Karsten Thoms Markus Völter, Sebastian Zarnekow itemis AG
  • 3.
  • 4. Karsten Thoms Sebastian Zarnekow Jan Köhnlein Markus Voelter
  • 5. Karsten Thoms Sebastian Zarnekow Jan Köhnlein Markus Voelter
  • 7. Domain-specific Language (DSL) a formal, processable language targeting at a specific viewpoint or aspect of a system.
  • 9. @Entity public class Customer implements Serializable { private Long id; private String name; private Address address; private Collection<Order> orders = new HashSet<Order>(); private Set<PhoneNumber> phones = new HashSet<PhoneNumber>(); public Customer() {} @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @OneToMany public Collection<Order> getOrders() { return orders; } public void setOrders(Collection<Order> orders) { this.orders = orders; } @ManyToMany public Set<PhoneNumber> getPhones() { return phones; } public void setPhones(Set<PhoneNumber> phones) { this.phones = phones; } }
  • 10. @Entity public class Customer implements Serializable { private Long id; private String name; private Address address; private Collection<Order> orders = new HashSet<Order>(); private Set<PhoneNumber> phones = new HashSet<PhoneNumber>(); public Customer() {} @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } entity Customer { public void setName(String name) { this.name = name; String name } Address address public Address getAddress() { return address; Order* orders } public void setAddress(Address address) { PhoneNumber** phones this.address = address; } } @OneToMany public Collection<Order> getOrders() { return orders; } public void setOrders(Collection<Order> orders) { this.orders = orders; } @ManyToMany public Set<PhoneNumber> getPhones() { return phones; } public void setPhones(Set<PhoneNumber> phones) { this.phones = phones; } }
  • 12. The right tool for the right job
  • 14.
  • 15. G ra m m ar
  • 16. Reference ar Model m m ra G
  • 17. Reference ar Model m m ra G
  • 18. Reference ar Model m m ra G DSL Workbench
  • 19. Reference ar Model m m ra G DSL Workbench Editor
  • 20. Reference ar Model m m ra G DSL Workbench Editor Infrastucture
  • 21. Reference ar Model m m ra G DSL Workbench Editor Infrastucture Generator
  • 22. Editor Generator
  • 23. Editor AST Generator
  • 24. Editor AST TeX Xpa T ma p TeXeXpa p n nd m l p Te m a p n ad m pln lad te pl ad te at te e Generator
  • 25. Editor AST TeX Xpa T ma p TeXeXpa p n nd m l p Te m a p n ad m pln lad te pl ad te at te e Generator
  • 26. Editor AST TeX Xpa T ma p TeXeXpa p n nd m l p Te m a p n ad m pln lad te pl ad te at te e Generator E Ex xe Ex A c r Ex Ae etcu uta Aecrtcuifata bl A rti uifata ctbl e rt fata ctb e ifa c b le ct t le
  • 28. Generation Gap Pattern BaseClass baseMethod() framework manually written AbstractGeneratedClass generatedMethod() generated ConcreteCustomizedClass overriddenMethod() generated once additionalMethod() modified manually
  • 29. Questions? find out more at http://www.xtext.org

Notas del editor

  1. st&amp;#xFC;ckweise durchgehen
  2. Java schlecht im Abstrahieren von Struktur, Redundanz Code-Generierung definiert Platform-Mapping (Architekt) Referenz aus anderen DSLs, Wartbarkeit
  3. Java schlecht im Abstrahieren von Struktur, Redundanz Code-Generierung definiert Platform-Mapping (Architekt) Referenz aus anderen DSLs, Wartbarkeit
  4. Java schlecht im Abstrahieren von Struktur, Redundanz Code-Generierung definiert Platform-Mapping (Architekt) Referenz aus anderen DSLs, Wartbarkeit
  5. Raise level of abstraction, Avoids redundancy Separation of concerns, Reuse of domain concepts Higher expressiveness, Ubiquitous language
  6. Die DSL f&amp;#xFC;r DSLs, Eclipse-basiert Define textual DSLs easily, Ready-to-use tool-chain, Easy but flexible customizing and tweaking, Durable foundation with Java Eclipse EMF, Strong community