This is an automated email from the ASF dual-hosted git repository. marat pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
The following commit(s) were added to refs/heads/main by this push: new 8e30936 Rollback errorrously deleted Project Classes (#434) 8e30936 is described below commit 8e30936b1e771d1d59b08c33730cae0ad229e243 Author: Marat Gubaidullin <marat.gubaidul...@gmail.com> AuthorDate: Thu Jul 28 21:29:11 2022 -0400 Rollback errorrously deleted Project Classes (#434) --- karavan-app/src/main/webapp/src/Main.tsx | 2 +- .../src/main/webapp/src/builder/BuilderPage.tsx | 1 - .../main/webapp/src/components/ComponentCard.tsx | 2 +- .../src/main/webapp/src/kamelets/KameletCard.tsx | 2 +- .../src/main/webapp/src/projects/ProjectPage.tsx | 2 +- karavan-core/src/core/api/ProjectModelApi.ts | 71 ++++++++++++++++++++++ karavan-core/src/core/model/ProjectModel.ts | 43 +++++++++++++ 7 files changed, 118 insertions(+), 5 deletions(-) diff --git a/karavan-app/src/main/webapp/src/Main.tsx b/karavan-app/src/main/webapp/src/Main.tsx index 4e718cf..7d2fad7 100644 --- a/karavan-app/src/main/webapp/src/Main.tsx +++ b/karavan-app/src/main/webapp/src/Main.tsx @@ -125,7 +125,7 @@ export class Main extends React.Component<Props, State> { pageNav = () => { const pages: MenuItem[] = [ - new MenuItem("dashboard", "Dashboard", <TachometerAltIcon/>), + // new MenuItem("dashboard", "Dashboard", <TachometerAltIcon/>), new MenuItem("projects", "Projects", <ProjectsIcon/>), new MenuItem("eip", "Enterprise Integration Patterns", <EipIcon/>), new MenuItem("kamelets", "Kamelets", <KameletsIcon/>), diff --git a/karavan-app/src/main/webapp/src/builder/BuilderPage.tsx b/karavan-app/src/main/webapp/src/builder/BuilderPage.tsx index 605521c..43c27d5 100644 --- a/karavan-app/src/main/webapp/src/builder/BuilderPage.tsx +++ b/karavan-app/src/main/webapp/src/builder/BuilderPage.tsx @@ -181,7 +181,6 @@ export class BuilderPage extends React.Component<Props, State> { } getHeader() { - const {project} = this.state; return ( <PageSection className="tools-section" variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light}> <Flex className="tools" direction={{default: 'row'}} justifyContent={{default: 'justifyContentSpaceBetween'}} spaceItems={{default: 'spaceItemsLg'}}> diff --git a/karavan-app/src/main/webapp/src/components/ComponentCard.tsx b/karavan-app/src/main/webapp/src/components/ComponentCard.tsx index 6d465f3..1fe5269 100644 --- a/karavan-app/src/main/webapp/src/components/ComponentCard.tsx +++ b/karavan-app/src/main/webapp/src/components/ComponentCard.tsx @@ -16,7 +16,7 @@ */ import React from 'react'; import { - CardHeader, Card, CardTitle, CardBody, CardActions, CardFooter,Badge + CardHeader, Card, CardTitle, CardBody, CardFooter,Badge } from '@patternfly/react-core'; import '../designer/karavan.css'; import {camelIcon, CamelUi} from "../designer/utils/CamelUi"; diff --git a/karavan-app/src/main/webapp/src/kamelets/KameletCard.tsx b/karavan-app/src/main/webapp/src/kamelets/KameletCard.tsx index 31ac3c6..2bae9fc 100644 --- a/karavan-app/src/main/webapp/src/kamelets/KameletCard.tsx +++ b/karavan-app/src/main/webapp/src/kamelets/KameletCard.tsx @@ -16,7 +16,7 @@ */ import React from 'react'; import { - CardHeader, Card, CardTitle, CardBody, CardActions, CardFooter,Badge + CardHeader, Card, CardTitle, CardBody, CardFooter,Badge } from '@patternfly/react-core'; import '../designer/karavan.css'; import {KameletModel} from "karavan-core/lib/model/KameletModels"; diff --git a/karavan-app/src/main/webapp/src/projects/ProjectPage.tsx b/karavan-app/src/main/webapp/src/projects/ProjectPage.tsx index a96ca7f..2af988a 100644 --- a/karavan-app/src/main/webapp/src/projects/ProjectPage.tsx +++ b/karavan-app/src/main/webapp/src/projects/ProjectPage.tsx @@ -21,7 +21,7 @@ import { ToggleGroup, ToggleGroupItem, CodeBlockCode, - CodeBlock, Skeleton, Switch, Checkbox, Tabs, Tab + CodeBlock, Skeleton, Checkbox, Tabs, Tab } from '@patternfly/react-core'; import '../designer/karavan.css'; import {MainToolbar} from "../MainToolbar"; diff --git a/karavan-core/src/core/api/ProjectModelApi.ts b/karavan-core/src/core/api/ProjectModelApi.ts new file mode 100644 index 0000000..c6dbe7d --- /dev/null +++ b/karavan-core/src/core/api/ProjectModelApi.ts @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import {ProjectModel, ProjectProperty} from "../model/ProjectModel"; + +export class ProjectModelApi { + + static propertiesToProject = (properties: string): ProjectModel => { + const lines = properties.split(/\r?\n/).filter(text => text.trim().length > 0 && !text.trim().startsWith("#")); + const project = new ProjectModel(); + + project.properties = lines.map(value => this.stringToProperty(value)); + return project; + } + + static stringToProperty = (line: string): ProjectProperty => { + const pair = line.split("="); + const value = pair[1]; + return ProjectProperty.createNew(pair[0], value); + } + + static propertiesToString = (properties: ProjectProperty[]): string => { + const result: string[] = []; + properties.forEach((p, key) => { + if (p !== undefined) result.push(p.key + "=" + p.value); + }) + return result.join("\n"); + } + + static getProfiles = (properties: ProjectProperty[]): string[] => { + const result: string[] = []; + properties.forEach((p, key) => { + if (p.key.startsWith("%")) { + const profile = p.key.substring(1, p.key.indexOf(".")); + if (!result.includes(profile)) result.push(profile); + } + }) + return result; + } + + static updateProperties = (properties: string, project: ProjectModel): string => { + const mapFromProject = this.projectToMap(project); + const result: string[] = []; + mapFromProject.forEach((value, key) => { + if (value !== undefined) result.push(key + "=" + value); + }) + return result.join("\n"); + } + + static projectToMap = (project: ProjectModel): Map<string, any> => { + const map = new Map<string, any>(); + + if (project.properties && project.properties.length > 0) { + project.properties.forEach(p => map.set(p.key, p.value)); + } + return map; + } +} diff --git a/karavan-core/src/core/model/ProjectModel.ts b/karavan-core/src/core/model/ProjectModel.ts new file mode 100644 index 0000000..396fd3c --- /dev/null +++ b/karavan-core/src/core/model/ProjectModel.ts @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import {v4 as uuidv4} from "uuid"; + +export class ProjectProperty { + id: string = '' + key: string = '' + value: any + + public constructor(init?: Partial<ProjectProperty>) { + Object.assign(this, init); + } + + static createNew(key: string, value: any): ProjectProperty { + return new ProjectProperty({id: uuidv4(), key: key, value: value}) + } +} + +export class ProjectModel { + properties: ProjectProperty[] = [] + + public constructor(init?: Partial<ProjectModel>) { + Object.assign(this, init); + } + + static createNew(init?: Partial<ProjectModel>): ProjectModel { + return new ProjectModel(init ? init : {}) + } +} \ No newline at end of file