Skip to content
Snippets Groups Projects
Commit ee0966ac authored by tjc's avatar tjc
Browse files

split Feature.xml into chado parts

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@4964 ee4ac58c-ac51-4696-9907-e4b3aa274f04
parent d900ff91
No related branches found
No related tags found
No related merge requests found
......@@ -9,25 +9,7 @@
<typeAlias alias="Feature"
type="org.gmod.schema.sequence.Feature"/>
<typeAlias alias="FeatureLoc"
type="org.gmod.schema.sequence.FeatureLoc"/>
<typeAlias alias="FeatureProp"
type="org.gmod.schema.sequence.FeatureProp"/>
<typeAlias alias="FeatureRelationship"
type="org.gmod.schema.sequence.FeatureRelationship"/>
<typeAlias alias="FeatureCvTerm"
type="org.gmod.schema.sequence.FeatureCvTerm"/>
<typeAlias alias="FeatureCvTermProp"
type="org.gmod.schema.sequence.FeatureCvTermProp"/>
<typeAlias alias="FeatureCvTermDbXRef"
type="org.gmod.schema.sequence.FeatureCvTermDbXRef"/>
<parameterMap id="schema-cvlist"
class="Feature">
<parameter property="schema" javaType="java.lang.String"/>
......@@ -39,7 +21,7 @@
<result property="timeLastModified" column="timelastmodified"/>
<result property="featureId" column="id"/>
<result property="featureRelationshipsForSubjectId"
resultMap="Feature.feature_relationship" />
resultMap="FeatureRelationship.feature_relationship" />
<!--
<result property="featureRelationship.featureByObjectId.featureId" column="object_id"/>
<result property="featureRelationship.cvTerm.cvTermId" column="relation_type_id"/>
......@@ -51,7 +33,7 @@
<result property="featureLoc.phase" column="phase"/>
<result property="uniqueName" column="uniquename"/>
<result property="cvTerm.cvTermId" column="type_id"/>
<result property="featureProps" resultMap="Feature.featureprop" />
<result property="featureProps" resultMap="FeatureProp.featureprop" />
<!--
<result property="featureprop.cvTerm.cvTermId" column="prop_type_id" nullValue="0"/>
<result property="featureprop.value" column="value"/>
......@@ -95,159 +77,8 @@
<result property="featureId" column="feature_id"/>
<result property="cvTerm.cvTermId" column="type_id"/>
</resultMap>
<resultMap id="select-featureprop"
class="FeatureProp">
<result property="value" column="value" />
<result property="rank" column="rank" />
<result property="cvTerm" column="type_id" select="selectCvterm" />
</resultMap>
<resultMap id="featureprop"
class="FeatureProp">
<result property="value" column="value" />
<result property="rank" column="prop_rank" />
<result property="cvTerm.cvTermId" column="prop_type_id" />
</resultMap>
<resultMap id="feature_relationship"
class="FeatureRelationship">
<result property="featureByObjectId.featureId" column="object_id"/>
<result property="cvTerm.cvTermId" column="relation_type_id"/>
<result property="rank" column="rank"/>
<result property="value" column="relation_value" />
</resultMap>
<resultMap id="select-relationship"
class="FeatureRelationship">
<result property="featureBySubjectId.featureId" column="subject_id" />
<result property="featureByObjectId.featureId" column="object_id" />
<result property="value" column="value" />
<result property="rank" column="rank" />
<result property="cvTerm" column="type_id" select="selectCvterm" />
</resultMap>
<resultMap id="select-location"
class="FeatureLoc">
<result property="featureBySrcFeatureId.featureId" column="srcfeature_id" nullValue="-999" />
<result property="fmin" column="fmin" nullValue="-999" />
<result property="fmax" column="fmax" nullValue="-999" />
<result property="strand" column="strand" nullValue="0" />
<result property="phase" column="phase" nullValue="0" />
<result property="residueInfo" column="residue_info"/>
<result property="locGroup" column="locgroup"/>
<result property="rank" column="rank"/>
</resultMap>
<resultMap id="feature_cvtermprop" class="FeatureCvTermProp">
<result property="cvTerm.cvTermId" column="type_id" />
<result property="value" column="value" />
<result property="rank" column="rank" />
</resultMap>
<resultMap id="select-featurecvterm" class="FeatureCvTerm"
groupBy="featureCvTermId">
<result property="featureCvTermId" column="feature_cvterm_id" />
<result property="feature.featureId" column="feature_id" />
<result property="cvTerm.cvTermId" column="cvterm_id" />
<result property="cvTerm.name" column="cvterm_name" />
<result property="cvTerm.cv.name" column="cv_name" />
<result property="not" column="is_not" />
<result property="rank" column="fc_rank" />
<result property="featureCvTermProps" resultMap="Feature.feature_cvtermprop" />
<result property="pub.pubId" column="pub_id" />
<result property="pub.uniqueName" column="uniquename" />
<result property="cvTerm.dbXRef.accession" column="accession" />
<result property="cvTerm.dbXRef.db.name" column="name" />
<!-- <result property="pub" column="pub_id" select="selectPub" /> -->
</resultMap>
<resultMap id="select-featurecvtermdbxref" class="FeatureCvTermDbXRef"
groupBy="featureCvTermId">
<result property="featureCvTerm.featureCvTermId" column="feature_cvterm_id" />
<result property="dbXRef.accession" column="accession"/>
<result property="dbXRef.version" column="version"/>
<result property="dbXRef.description" column="description"/>
<result property="dbXRef.db.name" column="name"/>
</resultMap>
<!-- SQL -->
<!-- select featureprops e.g. for lazy loading -->
<select id="selectFeatureProp" resultMap="select-featureprop">
SELECT type_id, value, rank
FROM featureprop
WHERE feature_id=#feature_id#
</select>
<!-- select feature_relationship -->
<select id="getFeatureRelationship" resultMap="select-relationship">
SELECT subject_id, object_id, type_id, value, rank
FROM feature_relationship
WHERE
<dynamic>
<isNotNull property="object_id">
object_id=#object_id#
</isNotNull>
<isNotNull property="subject_id">
subject_id=#subject_id#
</isNotNull>
</dynamic>
</select>
<!-- select featureloc -->
<select id="getFeatureLoc" resultMap="select-location">
SELECT srcfeature_id, fmin, fmax, strand, phase, residue_info, locgroup, rank
FROM featureloc
WHERE featureloc.feature_id=#id#
</select>
<!-- select feature_cvterm -->
<select id="getFeatureCvTermsByFeature" parameterClass="Feature"
resultMap="select-featurecvterm">
SELECT
fc.feature_id,
fc.feature_cvterm_id,
fc.cvterm_id,
fc.rank AS fc_rank,
fc.is_not,
fcp.type_id, fcp.value, fcp.rank,
cvterm.name AS cvterm_name,
cv.name AS cv_name,
pub.pub_id,
pub.uniquename,
db.name,
dbxref.accession
FROM feature_cvterm fc
LEFT JOIN feature_cvtermprop fcp ON fc.feature_cvterm_id=fcp.feature_cvterm_id
LEFT JOIN cvterm ON cvterm.cvterm_id=fc.cvterm_id
LEFT JOIN cv ON cvterm.cv_id=cv.cv_id
LEFT JOIN pub ON fc.pub_id=pub.pub_id
LEFT JOIN dbxref ON cvterm.dbxref_id=dbxref.dbxref_id
LEFT JOIN db ON dbxref.db_id=db.db_id
<dynamic>
<isNotNull property="uniqueName" prepend="WHERE">
feature_id=(SELECT feature_id FROM feature WHERE uniquename=#uniqueName#)
</isNotNull>
</dynamic>
ORDER BY fc.feature_cvterm_id, fc.rank, type_id, fcp.rank;
</select>
<select id="getFeatureCvTermDbXRef" parameterClass="Feature"
resultMap="select-featurecvtermdbxref">
SELECT feature_cvterm_id, dbx.*, db.name
FROM feature_cvterm_dbxref fcd
LEFT JOIN dbxref dbx ON dbx.dbxref_id=fcd.dbxref_id
LEFT JOIN db ON db.db_id=dbx.db_id
<dynamic>
<isNotNull property="uniqueName">
LEFT JOIN feature_cvterm fc ON fcd.feature_cvterm_id=fc.feature_cvterm_id
WHERE
feature_id=(SELECT feature_id FROM feature WHERE uniquename=#uniqueName#)
</isNotNull>
</dynamic>
</select>
<!-- get feature -->
......@@ -359,22 +190,6 @@
<!-- WRITE BACK METHODS -->
<!-- UPDATE -->
<update id="updateFeatureLoc"
parameterClass="FeatureLoc">
UPDATE featureloc
SET fmin=$fmin$, fmax=$fmax$, rank=$rank$, strand=$strand$
<isNotNull property="phase">
, phase=$phase$
</isNotNull>
<isNull property="phase">
, phase=NULL
</isNull>
WHERE
<isNotNull property="featureByFeatureId.uniqueName">
feature_id=(SELECT feature_id FROM feature WHERE uniquename=#featureByFeatureId.uniqueName#)
</isNotNull>
</update>
<update id="updateFeature"
parameterClass="Feature">
UPDATE feature
......@@ -387,36 +202,9 @@
</isNotNull>
WHERE feature_id=$featureId$
</update>
<update id="updateFeatureProp"
parameterClass="FeatureProp">
UPDATE featureprop
SET value=#value#
WHERE rank=$rank$ AND type_id=$cvTerm.cvTermId$ AND
feature_id=(SELECT feature_id FROM feature WHERE uniquename=#feature.uniqueName#)
</update>
<update id="updateFeatureRelationshipsForSubjectId"
parameterClass="FeatureRelationship">
UPDATE feature_relationship
SET
rank=$rank$, type_id=$cvTerm.cvTermId$
WHERE subject_id=
( SELECT feature_id FROM feature WHERE uniquename=#featureBySubjectId.uniqueName# )
AND object_id=
( SELECT feature_id FROM feature WHERE uniquename=#featureByObjectId.uniqueName# )
</update>
<!-- INSERT -->
<insert id="insertFeatureProp"
parameterClass="FeatureProp">
INSERT INTO featureprop
( feature_id, type_id, value, rank )
VALUES
( (SELECT feature_id FROM feature WHERE uniquename=#feature.uniqueName#),
$cvTerm.cvTermId$, #value#, $rank$ )
</insert>
<insert id="insertFeature"
parameterClass="Feature">
INSERT INTO feature
......@@ -428,59 +216,9 @@
#uniqueName#,
$cvTerm.cvTermId$ )
</insert>
<insert id="insertFeatureLoc"
parameterClass="Feature">
INSERT INTO featureloc
( featureloc_id, feature_id, srcfeature_id, fmin, fmax, strand
<isNotNull property="featureLoc.phase">
, phase
</isNotNull>
)
VALUES
( nextval('featureloc_featureloc_id_seq'),
$featureId$,
$featureLoc.featureBySrcFeatureId.featureId$,
$featureLoc.fmin$,
$featureLoc.fmax$,
$featureLoc.strand$
<isNotNull property="featureLoc.phase">
, $featureLoc.phase$
</isNotNull>
)
</insert>
<insert id="insertFeatureRelationship"
parameterClass="FeatureRelationship">
INSERT INTO feature_relationship
( subject_id, object_id, type_id )
VALUES
( (SELECT feature_id FROM feature WHERE uniquename=#featureBySubjectId.uniqueName#),
(SELECT feature_id FROM feature WHERE uniquename=#featureByObjectId.uniqueName#),
$cvTerm.cvTermId$ )
</insert>
<!-- DELETE -->
<delete id="deleteFeatureProp"
parameterClass="FeatureProp">
DELETE FROM featureprop
WHERE
<isNotNull property="feature.uniqueName">
feature_id=
(SELECT feature_id FROM feature WHERE uniquename=#feature.uniqueName#)
AND
</isNotNull>
<isGreaterThan property="rank" compareValue="-1">
rank=$rank$ AND
</isGreaterThan>
<isNotNull property="value">
value=#value# AND
</isNotNull>
type_id=$cvTerm.cvTermId$
</delete>
<delete id="deleteFeature"
parameterClass="Feature">
DELETE FROM feature
......
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="FeatureCvTerm">
<typeAlias alias="FeatureCvTerm"
type="org.gmod.schema.sequence.FeatureCvTerm"/>
<resultMap id="select-featurecvterm" class="FeatureCvTerm"
groupBy="featureCvTermId">
<result property="featureCvTermId" column="feature_cvterm_id" />
<result property="feature.featureId" column="feature_id" />
<result property="cvTerm.cvTermId" column="cvterm_id" />
<result property="cvTerm.name" column="cvterm_name" />
<result property="cvTerm.cv.name" column="cv_name" />
<result property="not" column="is_not" />
<result property="rank" column="fc_rank" />
<result property="featureCvTermProps" resultMap="FeatureCvTermProp.feature_cvtermprop" />
<result property="pub.pubId" column="pub_id" />
<result property="pub.uniqueName" column="uniquename" />
<result property="cvTerm.dbXRef.accession" column="accession" />
<result property="cvTerm.dbXRef.db.name" column="name" />
<!-- <result property="pub" column="pub_id" select="selectPub" /> -->
</resultMap>
<!-- select feature_cvterm -->
<select id="getFeatureCvTermsByFeature" parameterClass="Feature"
resultMap="select-featurecvterm">
SELECT
fc.feature_id,
fc.feature_cvterm_id,
fc.cvterm_id,
fc.rank AS fc_rank,
fc.is_not,
fcp.type_id, fcp.value, fcp.rank,
cvterm.name AS cvterm_name,
cv.name AS cv_name,
pub.pub_id,
pub.uniquename,
db.name,
dbxref.accession
FROM feature_cvterm fc
LEFT JOIN feature_cvtermprop fcp ON fc.feature_cvterm_id=fcp.feature_cvterm_id
LEFT JOIN cvterm ON cvterm.cvterm_id=fc.cvterm_id
LEFT JOIN cv ON cvterm.cv_id=cv.cv_id
LEFT JOIN pub ON fc.pub_id=pub.pub_id
LEFT JOIN dbxref ON cvterm.dbxref_id=dbxref.dbxref_id
LEFT JOIN db ON dbxref.db_id=db.db_id
<dynamic>
<isNotNull property="uniqueName" prepend="WHERE">
feature_id=(SELECT feature_id FROM feature WHERE uniquename=#uniqueName#)
</isNotNull>
</dynamic>
ORDER BY fc.feature_cvterm_id, fc.rank, type_id, fcp.rank;
</select>
</sqlMap>
\ No newline at end of file
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="FeatureCvTermDbXRef">
<typeAlias alias="FeatureCvTermDbXRef"
type="org.gmod.schema.sequence.FeatureCvTermDbXRef"/>
<resultMap id="select-featurecvtermdbxref" class="FeatureCvTermDbXRef"
groupBy="featureCvTermId">
<result property="featureCvTerm.featureCvTermId" column="feature_cvterm_id" />
<result property="dbXRef.accession" column="accession"/>
<result property="dbXRef.version" column="version"/>
<result property="dbXRef.description" column="description"/>
<result property="dbXRef.db.name" column="name"/>
</resultMap>
<select id="getFeatureCvTermDbXRef" parameterClass="Feature"
resultMap="select-featurecvtermdbxref">
SELECT feature_cvterm_id, dbx.*, db.name
FROM feature_cvterm_dbxref fcd
LEFT JOIN dbxref dbx ON dbx.dbxref_id=fcd.dbxref_id
LEFT JOIN db ON db.db_id=dbx.db_id
<dynamic>
<isNotNull property="uniqueName">
LEFT JOIN feature_cvterm fc ON fcd.feature_cvterm_id=fc.feature_cvterm_id
WHERE
feature_id=(SELECT feature_id FROM feature WHERE uniquename=#uniqueName#)
</isNotNull>
</dynamic>
</select>
</sqlMap>
\ No newline at end of file
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="FeatureCvTermProp">
<typeAlias alias="FeatureCvTermProp"
type="org.gmod.schema.sequence.FeatureCvTermProp"/>
<resultMap id="feature_cvtermprop" class="FeatureCvTermProp">
<result property="cvTerm.cvTermId" column="type_id" />
<result property="value" column="value" />
<result property="rank" column="rank" />
</resultMap>
</sqlMap>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="FeatureLoc">
<typeAlias alias="FeatureLoc"
type="org.gmod.schema.sequence.FeatureLoc"/>
<resultMap id="select-location"
class="FeatureLoc">
<result property="featureBySrcFeatureId.featureId" column="srcfeature_id" nullValue="-999" />
<result property="fmin" column="fmin" nullValue="-999" />
<result property="fmax" column="fmax" nullValue="-999" />
<result property="strand" column="strand" nullValue="0" />
<result property="phase" column="phase" nullValue="0" />
<result property="residueInfo" column="residue_info"/>
<result property="locGroup" column="locgroup"/>
<result property="rank" column="rank"/>
</resultMap>
<!-- select featureloc -->
<select id="getFeatureLoc" resultMap="select-location">
SELECT srcfeature_id, fmin, fmax, strand, phase, residue_info, locgroup, rank
FROM featureloc
WHERE featureloc.feature_id=#id#
</select>
<!-- WRITE BACK METHODS -->
<!-- UPDATE -->
<update id="updateFeatureLoc"
parameterClass="FeatureLoc">
UPDATE featureloc
SET fmin=$fmin$, fmax=$fmax$, rank=$rank$, strand=$strand$
<isNotNull property="phase">
, phase=$phase$
</isNotNull>
<isNull property="phase">
, phase=NULL
</isNull>
WHERE
<isNotNull property="featureByFeatureId.uniqueName">
feature_id=(SELECT feature_id FROM feature WHERE uniquename=#featureByFeatureId.uniqueName#)
</isNotNull>
</update>
<insert id="insertFeatureLoc"
parameterClass="Feature">
INSERT INTO featureloc
( featureloc_id, feature_id, srcfeature_id, fmin, fmax, strand
<isNotNull property="featureLoc.phase">
, phase
</isNotNull>
)
VALUES
( nextval('featureloc_featureloc_id_seq'),
$featureId$,
$featureLoc.featureBySrcFeatureId.featureId$,
$featureLoc.fmin$,
$featureLoc.fmax$,
$featureLoc.strand$
<isNotNull property="featureLoc.phase">
, $featureLoc.phase$
</isNotNull>
)
</insert>
</sqlMap>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="FeatureProp">
<typeAlias alias="FeatureProp"
type="org.gmod.schema.sequence.FeatureProp"/>
<resultMap id="select-featureprop"
class="FeatureProp">
<result property="value" column="value" />
<result property="rank" column="rank" />
<result property="cvTerm" column="type_id" select="selectCvterm" />
</resultMap>
<resultMap id="featureprop"
class="FeatureProp">
<result property="value" column="value" />
<result property="rank" column="prop_rank" />
<result property="cvTerm.cvTermId" column="prop_type_id" />
</resultMap>
<!-- select featureprops e.g. for lazy loading -->
<select id="selectFeatureProp" resultMap="select-featureprop">
SELECT type_id, value, rank
FROM featureprop
WHERE feature_id=#feature_id#
</select>
<update id="updateFeatureProp"
parameterClass="FeatureProp">
UPDATE featureprop
SET value=#value#
WHERE rank=$rank$ AND type_id=$cvTerm.cvTermId$ AND
feature_id=(SELECT feature_id FROM feature WHERE uniquename=#feature.uniqueName#)
</update>
<!-- INSERT -->
<insert id="insertFeatureProp"
parameterClass="FeatureProp">
INSERT INTO featureprop
( feature_id, type_id, value, rank )
VALUES
( (SELECT feature_id FROM feature WHERE uniquename=#feature.uniqueName#),
$cvTerm.cvTermId$, #value#, $rank$ )
</insert>
<!-- DELETE -->
<delete id="deleteFeatureProp"
parameterClass="FeatureProp">
DELETE FROM featureprop
WHERE
<isNotNull property="feature.uniqueName">
feature_id=
(SELECT feature_id FROM feature WHERE uniquename=#feature.uniqueName#)
AND
</isNotNull>
<isGreaterThan property="rank" compareValue="-1">
rank=$rank$ AND
</isGreaterThan>
<isNotNull property="value">
value=#value# AND
</isNotNull>
type_id=$cvTerm.cvTermId$
</delete>
</sqlMap>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="FeatureRelationship">
<typeAlias alias="FeatureRelationship"
type="org.gmod.schema.sequence.FeatureRelationship"/>
<resultMap id="feature_relationship"
class="FeatureRelationship">
<result property="featureByObjectId.featureId" column="object_id"/>
<result property="cvTerm.cvTermId" column="relation_type_id"/>
<result property="rank" column="rank"/>
<result property="value" column="relation_value" />
</resultMap>
<resultMap id="select-relationship"
class="FeatureRelationship">
<result property="featureBySubjectId.featureId" column="subject_id" />
<result property="featureByObjectId.featureId" column="object_id" />
<result property="value" column="value" />
<result property="rank" column="rank" />
<result property="cvTerm" column="type_id" select="selectCvterm" />
</resultMap>
<!-- select feature_relationship -->
<select id="getFeatureRelationship" resultMap="select-relationship">
SELECT subject_id, object_id, type_id, value, rank
FROM feature_relationship
WHERE
<dynamic>
<isNotNull property="object_id">
object_id=#object_id#
</isNotNull>
<isNotNull property="subject_id">
subject_id=#subject_id#
</isNotNull>
</dynamic>
</select>
<update id="updateFeatureRelationshipsForSubjectId"
parameterClass="FeatureRelationship">
UPDATE feature_relationship
SET
rank=$rank$, type_id=$cvTerm.cvTermId$
WHERE subject_id=
( SELECT feature_id FROM feature WHERE uniquename=#featureBySubjectId.uniqueName# )
AND object_id=
( SELECT feature_id FROM feature WHERE uniquename=#featureByObjectId.uniqueName# )
</update>
<insert id="insertFeatureRelationship"
parameterClass="FeatureRelationship">
INSERT INTO feature_relationship
( subject_id, object_id, type_id )
VALUES
( (SELECT feature_id FROM feature WHERE uniquename=#featureBySubjectId.uniqueName#),
(SELECT feature_id FROM feature WHERE uniquename=#featureByObjectId.uniqueName#),
$cvTerm.cvTermId$ )
</insert>
</sqlMap>
\ No newline at end of file
......@@ -52,6 +52,12 @@
<sqlMap resource="artemis_sqlmap/CvTerm.xml" />
<sqlMap resource="artemis_sqlmap/Pub.xml" />
<sqlMap resource="artemis_sqlmap/Feature.xml" />
<sqlMap resource="artemis_sqlmap/FeatureCvTerm.xml" />
<sqlMap resource="artemis_sqlmap/FeatureCvTermDbXRef.xml" />
<sqlMap resource="artemis_sqlmap/FeatureCvTermProp.xml" />
<sqlMap resource="artemis_sqlmap/FeatureLoc.xml" />
<sqlMap resource="artemis_sqlmap/FeatureProp.xml" />
<sqlMap resource="artemis_sqlmap/FeatureRelationship.xml" />
<sqlMap resource="artemis_sqlmap/DbXRef.xml" />
<sqlMap resource="artemis_sqlmap/Synonym.xml" />
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment